cocos2d-x+lua代码热加载(Hot Swap)的研究,cocos2d-xlua

  次阅读 作者:智能小宝 来源:互联网 2015-09-28 15:20 我要评论(0)

cocos2d-x+lua代码热加载(Hot Swap)的研究,cocos2d-xlua

代码热加载跟自动更新无关,主要目的是在程序运行的时候动态的替换代码,从而实现不重启程序而更新代码的目的。最理想的情况当然是我修改完代码并保存,然后就可以直接在游戏中看到修改后的效果,这个在实际开发过程中会大大提高效率。 即便达不到理想情况,我们也希望可以实现部分热加载,从而简化操作。例如我们可以仅仅对配置文件、消息文件、界面文件实现热加载,这样策划更新数据后可以直接在游戏中看结果,而不需要重新打开客户端去跑任务。

热加载主要原理其实很简单,lua require文件都会缓存在package.loaded里面,当重新加载文件的时候,把这个置空,然后重新require对应文件就可以了。

实际应用中会有更多需要考虑的因素,所以完全的代码热加载很复杂(原理很简单,但是实现很复杂,需要关注的因素很多)。

CocosIDE展示了代码热加载的效果:编辑场景中图片的位置并保存,然后图片自动放置到新的位置上面了。 这个效果看着非常神奇,但是实际上并没有什么实用价值。因为它的热加载,其实就是重新require文件(基于上面提到的原理)的过程,这个过程中会重新require 'main.lua',从而整个游戏都会被重新启动。当我们只有一个简单的场景的时候,就可以实现看起来很完美的热加载。然而,由于实际游戏客户端项目会比这个复杂很多,我们会涉及到多场景、多界面、多状态的维护,所以想实现没有Bug的热加载是很困难的。

现在只研究了一部分,初步可行,后期完善了会更加实用。

1、按R键重新加载所有的lua脚本。这个后面可以做很多优化。比如windows下检测文件变化,而不需要手动按键。只重新加载改变的文件而不是所有文件都遍历一遍。

local listener = cc.EventListenerKeyboard:create();

listener:registerScriptHandler(function(keycode, evt)

--print(keycode)

if keycode == 138 then

-- 按R重新加载代码

reload_script_files();

-- 逻辑代码重新加载所有的配置

-- 逻辑代码 关闭并重新打开当前已打开的窗口

end

end, cc.Handler.EVENT_KEYBOARD_RELEASED);

local eventDispatcher = cc.Director:getInstance():getEventDispatcher();

eventDispatcher:addEventListenerWithSceneGraphPriority(listener, scene);

2、重新加载脚本的实现,这个会递归遍历这个脚本所有依赖的子脚本。所以一般情况下我们只需要加载一个main.lua就足够了。当然后面优化后就可以加载特定的文件而无需从main.lua一直遍历下去

-- 外部库 登记

local package_list = package_list or {

bit = true,

lfs = true,

cjson = true,

pb = true,

socket = true,

}

-- 全局性质类/或禁止重新加载的文件记录

local ignored_file_list = ignored_file_list or {

global = true ,

}

--已重新加载的文件记录

local loaded_file_list = loaded_file_list or {}

--视图排版控制

function leading_tag( indent )

-- body

if indent < 1 then

return ''

else

return string.rep( '|',indent - 1) .. ''

end

end

--关键递归重新加载函数

--filename 文件名

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...