quick框架中的事件分发机制与cocos2dx的不同。
quick框架的事件按照功能和用途分为:
(1)节点事件
(2)帧事件
(3)键盘事件
(4)加速计事件
(5)触摸事件
1、节点事件
节点事件在一个node对象进入和退出场景时触发。它能被场景及其所有子节点监听。
node:addNodeEventListener(cc.NODE_EVENT,function(event)
print(event.name)
)
参数event只有name属性,值为:
(1)enter:加载场景
(2)exit:退出场景
(3)enterTransitionFinish:转场特效结束
(4)exitTransitionStart:转场特效开始
(5)cleanup:场景被完全清理并从内存删除
例:
local function createTestScene(name)
local scene = display.newScene(name)
scene:addNodeEventListener(cc.NODE_EVENT,function (event)
printf("node in scene [%s] NODE_EVENT:%s", name, event.name)
end)
return scene
end
--节点延时调度器
self:performWithDelay(function ()
local scene1 = createTestScene("scene1")
display.replaceScene(scene1)
scene1:performWithDelay(function ()
print("----------")
local scene2 = createTestScene("scene2")
-- display.replaceScene(scene2)
display.replaceScene(scene2,"random",1.0)
end,1.0)
end,1.0)
display.replaceScene(scene2):
[LUA-print] node in scene [scene1] NODE_EVENT:enter
[LUA-print] node in scene [scene1] NODE_EVENT:enterTransitionFinish
[LUA-print] ----------
[LUA-print] node in scene [scene1] NODE_EVENT:exitTransitionStart
[LUA-print] node in scene [scene1] NODE_EVENT:exit
[LUA-print] node in scene [scene1] NODE_EVENT:cleanup
[LUA-print] node in scene [scene2] NODE_EVENT:enter
[LUA-print] node in scene [scene2] NODE_EVENT:enterTransitionFinish
display.replaceScene(scene2,"random",1.0):
[LUA-print] node in scene [scene1] NODE_EVENT:enter
[LUA-print] node in scene [scene1] NODE_EVENT:enterTransitionFinish
[LUA-print] ----------
[LUA-print] node in scene [scene1] NODE_EVENT:exitTransitionStart
[LUA-print] node in scene [scene2] NODE_EVENT:enter
[LUA-print] node in scene [scene1] NODE_EVENT:exit
[LUA-print] node in scene [scene2] NODE_EVENT:enterTransitionFinish
[LUA-print] node in scene [scene1] NODE_EVENT:cleanup
造成这种区别的原因是场景切换特效播放的时候,会同时渲染两个场景,所以可以看到第二个场景的enter事件出现后,第一个场景的exit事件才出现。
因此,在使用节点事件的时候,不应该假定事件出现的顺序,而要根据特定事件采取特定处理措施。
建议如下:
(1)enter:做一些场景初始化工作
(2)exit:如果场景切换使用特效,这里可以停止场景中的动画,避免帧率下降
(3)cleanup:清理工作
帧事件
在cocos2d-x中,C++可以通过重载update函数在每帧刷新的时候执行自己需要的一些操作。在quick框架中,这种事件被称为帧事件,意思是每帧刷新时都会执行的事件。
--事件分发机制, 帧事件
local node = display.newNode()
self:addChild(node)
--注册事件
node:addNodeEventListener(cc.NODE_ENTER_FRAME_EVENT,function (dt)
print(dt)
end)
--启用帧事件
node:scheduleUpdate()
--0.5s后,停止帧事件
node:performWithDelay(function ()
--禁用帧事件
node:unscheduleUpdate()
print("STOP")
node:performWithDelay(function ()
--再次启用帧事件
node:scheduleUpdate()
end,0.5)
end,0.5)
当帧刷新时,node注册的事件就会监听到并执行回调函数function(dt) 打印dt的值。
[LUA-print] 0.01570799946785
[LUA-print] 0.015955999493599
[LUA-print] 0.017960999161005
[LUA-print] 0.015959000214934
[LUA-print] 0.01596700027585
[LUA-print] 0.016983000561595
[LUA-print] 0.016931999474764
[LUA-print] 0.016989000141621
[LUA-print] STOP
[LUA-print] 0.016109999269247
[LUA-print] 0.016019999980927
[LUA-print] 0.017037000507116
[LUA-print] 0.015969000756741
[LUA-print] 0.016951000317931
----------------------------------------------------------------------------------------------
cocos2d-x之lua核心编程 学习笔记