1.配置
cocos 版本为 v2.3.0.1
cocos2d-x版本为 v3.6
2.需求分析
a. 加载速度 csb文件的加载速度和Lua文件的加载速度据说是lua文件的加载速度略快 重大喜讯!Cocos Studio终于支持导出LUA文件了!
b. 回调特性,lua文件的回调特性使用方式简单。c++的回调特性看着就头疼c++回调特性 ,lua的回调特性在没有导出lua文件的情况下lua回调特性也是很麻烦 导出lua文件的方式就简单很多了 在参考了导出lua文件的回调特性后便有了本文
3 实际操作
创建窗口基类 Dialog.lua
--默认回调函数
function Dialog:onCallBack(sender, type)
end
--回调事件处理
function Dialog:callBackProvider(luaFileName, node, callbackName)
if not self[callbackName] then --新增默认回调函数
callbackName = "onCallBack"
return handler(self,self[callbackName], node)
end
--窗口初始化
function Dialog:init()
self:enableNodeEvents()
local name = self:getDialogName()
local luaScene = require(name).create(handler(self,self.callBackProvider)) --加载lua文件,并设置回调
self._layer = luaScene.root --保存根节点
if self._layer then
self:addChild(self._layer)
end
end
--根据获取窗口获取文件路径
function Dialog:getDialogName ()
if( self._dialogName and res.ui[self._dialogName] ) then
return res.ui[self._dialogName]
else
print("无法找到窗口名对应的资源路径")
end
return ""
end
在子类中只需要实现响应函数即可
login.lua
--click对应的回调
function LoginScene:onLogin(sender)
print("onLogin")
end
--touch对应的回调
function LoginScene:selectZhangHao(sender, type)
print("selectZhangHao type = " .. type)
end
--event对应的回调
function LoginScene:seleckServer(sender, type)
print("seleckServer type = " .. type)
end
3种方式对应的回调 其实都是一样的 touch和event比click多了一个type对应响应的事件
event对应的事件为0,1
touch对应的事件为0 —> began,1 —> moved,2 —> ended,3 —> cancelled
4.碰到的问题
cocos导出lua文件的时候 提示命名格式错误,原因可能是有2个
1.csb文件中的子节点命名重复,csb文件中子节点的命名不能出现同名的情况 即使是不在同一层
2.工程的命名检测没有打开 打开.cfg文件 找到 IsNameStandardized 字段 将"False"修改为="True"即可