Cocos 3.X lua 定时器

Oct 14, 2015


在cocos2d-x lua脚本中,原来引擎中的那些添加定时器的函数(schedule)没有自动绑定过来,而是引擎团队重新定义的,这里做个汇总,在 引擎根目录/cocos/scripting/lua-bindings/script extern.la文件中定义了 schedule performWithDelay 两个函数:

function schedule(node, callback, delay)
    local delay = cc.DelayTime:create(delay)
    local sequence = cc.Sequence:create(delay, cc.CallFunc:create(callback))
  	--无限循环
    local action = cc.RepeatForever:create(sequence)
    node:runAction(action)
    return action
end
function performWithDelay(node, callback, delay)
    local delay = cc.DelayTime:create(delay)
    local sequence = cc.Sequence:create(delay, cc.CallFunc:create(callback))
  	--定时一次
    node:runAction(sequence)
    return sequence
end

比较麻烦的是,这两个函数都必须有Node,当Node被移除时,这个定时器就某了。

如果要用到独立于Node的定时器,那么就要是用Scheduler的定时器函数了,在引擎根目录/cocos/scripting/lua-bindings/manual/cocos2dlua_cocos2dx_manual.cpp文件中定义了scheduleScriptFuncunscheduleScriptEntry两个函数,分别用来加入和删除定时器,栗子:

local callbackEntry =nil
local function callback(dt)
  cclog("callback")
  cc.Director:getInstance():getScheduler():unscheduleScriptEntry(callbackEntry)
end
callbackEntry = cc.Director:getInstance():getScheduler():scheduleScriptFunc(callback, 3, false)

其中scheduleScriptFunc的三个参数分别是:

callback: 回调函数,Scheduler会传递给回调函数一个参数dt,表示距离上次回调所经过的时间

delay:每次调用回调函数的时间间隔

pause: 是否停住,一般设为false就行,否则定时器停住不执行

scheduleScriptFunc的返回值是一个定时器凭据,该凭据用于在需要删除对应的定时器时传入作为参数,正如上面的例子代码所示