LuaFramework实现一个排行榜

本文深入探讨了热更新技术在游戏开发中的应用,通过一个具体的案例,详细介绍了如何利用Lua脚本和LuaComponent组件实现资源和代码的热更新。文章涵盖了从JSON数据解析到面板动态刷新的全过程,并分享了作者在实现过程中的心得与挑战。

唉,我好菜啊,本来想自己实现一套热更的,但是毫无思路,还是一步一步来吧,先抄抄看看别人的东西怎么样吧,写了个helloworld,支持资源和代码热更。
在这里插入图片描述
读取的json数据,在公司里面应该是读取服务器下发的协议数据,应该更麻烦。
json:

{
   
   
  "nodes": [
    {
   
   
      "Name": "kk",
      "Exp": 100,
      "Job": "AK1",
      "CombatPower": 300
    },
    {
   
   
      "Name": "lisi",
      "Exp": 1000,
      "Job": "AK2",
      "CombatPower": 15
    },
    {
   
   
      "Name": "lufei",
      "Exp": 200,
      "Job": "AK3",
      "CombatPower": 150
    },
    {
   
   
      "Name": "solong",
      "Exp": 300,
      "Job": "AK4",
      "CombatPower": 2
    }
  ]
}

define.lua:
在这里插入图片描述
我添加了RankView和RankCtrl
在这里插入图片描述
这里没有操作,其实可以把后面常用的luacomponent(都是静态方法)添加进来;
functions.lua
在这里插入图片描述
添加了全局函数,方便查找子节点
注意这里用cjson来操控json的加载和序列化。
json就放到指定文件夹下就可以了,看下面代码路径。
RankCtrl:

RankCtrl = {
   
   };
local this = RankCtrl;

local luaBehaviour;
local transform;
local gameObject;
local data;
local json = require "cjson"
local util = require "3rd/cjson/util"
local isExp = false;
require "Controller/RankItem"
--构建函数--
function RankCtrl.New()
    logWarn("RankCtrl.New--->>");
    return this;
end

function RankCtrl.Awake()
    logWarn("RankCtrl.Awake--->>");
    panelMgr:CreatePanel('Rank', this.OnCreate);
end

--启动事件--
function RankCtrl.OnCreate(obj)
    gameObject = obj;

    luaBehaviour = gameObject:GetComponent('LuaBehaviour');
    logWarn("Start lua--->>"..gameObject.name);
    resMgr:LoadPrefab('rank', {
   
    'RankItem' }, this.InitPanel);

    -- 事件注册
    luaBehaviour:AddClick(RankPanel.btnClose, this.OnClick);
    luaBehaviour:AddClick(RankPanel.btnExp,function()
        RankPanel.txtRankValue:GetComponent("Text").text = "经验值";
        this.isExp = true;
        this.Refresh();
    end);
    luaBehaviour:AddClick(RankPanel.btnCombatPower,function ()
        RankPanel.txtRankValue:GetComponent("Text").text = "战力";
        this.isExp = false;
        this.Refresh();
    end);
end

--初始化面板--
function RankCtrl.InitPanel(objs)
    ---@type table
    this.data = this.LoadData();
    table.sort(this.data.nodes,function (d1,d2)
        return d1.CombatPower<d2.CombatPower;
    end);
    local parent =RankPanel.RankItemParent;
    for i=1,#this.data.nodes do
        local go = newObject(objs[0])
     
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JustEasyCode

谢谢您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值