coso2dx-lua 电脑模拟器 , 不重启游戏 直接让修改过的 lua 代码 生效

开发环境: ui 编辑器  cocos stuidio   
                   代码编辑器   sublime

问题是:当我调整过一个 lua 文件时,

比如 self.text:setPositionY(100)

改成 self.text:setPositionY(200)  , 

我需要保存文件,然后重新开启客户端,然后点击进到刚刚修改的页面查看效果 。 

如果效果不是很满意,可能修改多次修改, 耗时比较长

当重新启动游戏时间比较长时,修改成本就比较大了。 

解决思路:

 让修改过的 lua 代码立刻生。、

    修改 lua  require 函数

解决方法:
    lua require  不会每次都去加载文件,而是只有第一次 加载时 加载文件,以后 每次require时 ,都是返回内存中 已经加载好的

数据, lua 是 通过 package.loaded  表来维护已经加载数据 ,

比如 local t =  require("game.UIShowPanel")

package.loaded["game.UIShowPanel"] = t 

以后 require 时 则会直接返回 package.loaded["game.UIShowPanel"]  而不是  加载文件

但是我们现在 ,需要让他 每次都去 加载文件, 这样就能让我们修改过的lua 代码直接生效,

我们只需要 将 设置 package.loaded["game.UIShowPanel"]  = nil  ,再次执行  require("game.UIShowPanel") 时 , 又会去加载文件了。

我在项目中时这样写的:

local origin = _G.require
 _G.require = function (modeName) 

       local data = origin(modeName)

       package.loaded[modeName] = nil 

      return data

end 

注意:重写后 , 程序运行效率 降低 ,应当添加 宏判断 , 是否时 开发版本 

结果: 

当我修改过一个文件时,只需将对应的页面重新打开一下就可以看效果了。 省去了 重开游戏的时间 

 

 

你可能感兴趣的:(coso2dx-lua 电脑模拟器 , 不重启游戏 直接让修改过的 lua 代码 生效)