首先引用cocos2dx库提供的 CCBReaderLoad
require "CCBReaderLoad"
定义一个加载函数 指定需要加载得ccbi
function LoadSceneFromCocosBuilder()
local proxy = CCBProxy:create()
local node = CCBReaderLoad("MainScene.ccbi",proxy,true,"MainScene")
local layer = tolua.cast(node,"CCLayer")
-- MainScene = layer;
local scene = CCScene:create();
scene:addChild(layer)
cclog("load complete")
return scene
end
然后写一个main函数(默认执行的入口)
local function main()
配置一些系统参数
-- avoid memory leak
collectgarbage("setpause", 100)
collectgarbage("setstepmul", 5000)
这一行的作用是将加载后主场景与 MainScene 对应一起,所以这里ccb中的参数要和ccb中根节点的JS Controller的名称相同
而且注意统一得选用doc root var
MainScene = MainScene or {}
ccb["MainScene"] = MainScene
调用前面定义的加载函数拿到主场景
local scene = LoadSceneFromCocosBuilder()
if nil ~= scene then
CCDirector:sharedDirector():pushScene(CCTransitionFade:create(0.5, scene, ccc3(0,0,0)));
end
push过去,上面这句执行完毕后,就可以用过MainScene.xxxx来调用自定义的一些子节点对象了,如
local ccLabelTTF = tolua.cast(MainScene.helloLabel,"CCNode")
ccLabelTTF:setString("now ,i have got label");
就可以拿到label,对其赋值
定义点击事件
同时还可以定义button,并且设置其点击函数为onClick
MainScene.onClick = function() -- 这里的onClick是ClickMe按钮的回调函数
cclog("clicked Button");
local ccLabelTTF = tolua.cast(MainScene.helloLabel,"CCNode")
ccLabelTTF:setVisible(true)
if nil ~= MainScene["mAnimationManager"] then
local animationMgr = tolua.cast(MainScene["mAnimationManager"],"CCBAnimationManager")
if nil ~= animationMgr then
animationMgr:runAnimationsForSequenceNamedTweenDuration("mainloop", 0)
end
end
end
这样就指定了点击button后,跑一次mainloop