cocos2d-x lua热更新问题,重载reload
2017-09-06 16:02
1381 查看
1、什么是热更新?
热更新也叫不停机更新,是在游戏服务器运行期间对游戏进行更新。实现不停机修正bug、修改游戏数据等操作。也可以这样讲:一辆车以时速150km跑着,突然爆胎了,然后司机告诉你,我不停车,你去把轮胎换了,小心点。恩
2、热更新原理
第一种:
lua中的require会阻止多次加载相同的模块。所以当需要更新系统的时候,要卸载掉响应的模块。(把package.loaded里对应模块名下设置为nil,以保证下次require重新加载)并把全局表中的对应的模块表置 nil 。同时把数据记录在专用的全局表下,并用
local 去引用它。初始化这些数据的时候,首先应该检查他们是否被初始化过了。这样来保证数据不被更新过程重置。
代码示例:
[cpp] view
plain copy
function reloadUp(module_name)
package.loaded[modulename] = nil
require(modulename)
end
这种做法简单粗暴,虽然能完成热更新,但是问题很多,旧的引用的模块无法得到更新,这种程度的热更新显然不能满足现在的游戏开发需求。
第二种:
[cpp] view
plain copy
function reloadUp(module_name)
local old_module = _G[module_name]
package.loaded[module_name] = nil
require (module_name)
local new_module = _G[module_name]
for k, v in pairs(new_module) do
old_module[k] = v
end
package.loaded[module_name] = old_module
end
热更新也叫不停机更新,是在游戏服务器运行期间对游戏进行更新。实现不停机修正bug、修改游戏数据等操作。也可以这样讲:一辆车以时速150km跑着,突然爆胎了,然后司机告诉你,我不停车,你去把轮胎换了,小心点。恩
2、热更新原理
第一种:
lua中的require会阻止多次加载相同的模块。所以当需要更新系统的时候,要卸载掉响应的模块。(把package.loaded里对应模块名下设置为nil,以保证下次require重新加载)并把全局表中的对应的模块表置 nil 。同时把数据记录在专用的全局表下,并用
local 去引用它。初始化这些数据的时候,首先应该检查他们是否被初始化过了。这样来保证数据不被更新过程重置。
代码示例:
[cpp] view
plain copy
function reloadUp(module_name)
package.loaded[modulename] = nil
require(modulename)
end
这种做法简单粗暴,虽然能完成热更新,但是问题很多,旧的引用的模块无法得到更新,这种程度的热更新显然不能满足现在的游戏开发需求。
第二种:
[cpp] view
plain copy
function reloadUp(module_name)
local old_module = _G[module_name]
package.loaded[module_name] = nil
require (module_name)
local new_module = _G[module_name]
for k, v in pairs(new_module) do
old_module[k] = v
end
package.loaded[module_name] = old_module
end
相关文章推荐
- 使用lua更新脚本后,xcode下游戏资源没有更新的问题[quick-cocos2d-x]
- 使用lua更新脚本后,xcode下游戏资源没有更新的问题[quick-cocos2d-x]
- 【iOS-Cocos2d游戏开发之七】在cocos2d中添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题!【11月28日更新解决添加组件Cocos2d动画停止播放的BUG】
- Cocos2d-x 浅谈Lua与C++函数间互相调用问题
- cocos2d-x 以c++为主 引入LUA 与动态更新
- cocos2d-lua:小技巧及注意事项汇总(不定时更新)
- Cocos2d-x 3.0 Lua编程 之 响应物理引擎的Contact事件回调不运行的问题
- quick-cocos2d-x的热更新机制实现<四>update包(lua)(中)
- COCOS2D-X 快速熟悉LUA细节问题
- cocos2d-x 创建lua项目问题
- 【iOS-Cocos2d游戏开发之七】在cocos2d中添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题!【11月28日更新解决添加组件Cocos2d动画停止播放的BUG】
- cocos2d-x 3.0 + lua 开发问题与解决吐槽 - PART 1
- Cocos2d-x使用Luajit将Lua脚本编译为bytecode,实现加密 更新
- Cocos2d-x使用Luajit将Lua脚本编译为bytecode,实现加密 更新
- 一些cocos2d-x + lua学习资料备忘[持续更新]
- quick-cocos2d-x的热更新机制实现<四>update包(lua)(下)
- 【cocos2d-x 3.5】简单Lua 热更新
- cocos2d-lua android解决启动时因为资源加载而黑屏的问题
- [QuickX]xcode运行Quick-cocos2d-x项目时自动更新lua资源文件
- COCOS2D-X 快速熟悉LUA细节问题