quick框架事件分发机制

 

 

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核心编程 学习笔记

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值