下面是cocos官方的方法。
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
使用示例:
performWithDelay(node,function() print("Hello") end,time)
以下引用自:http://blog.csdn.net/hzl877243276/article/details/38468541
在 引擎根目錄/cocos/scripting/lua-bindings/script 的extern.lua文件中定義了 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
不難看出,這2個函數其實是用Action來實現了循環定時器和一次性回調定時器,按照這個思路也可以自己實現有限次調用的定時器
小結:以上方法提供的定時器是和Node相關的,因此當Node被移除出場景或者其他情況下,這類回調定時器將會被取消
如果要用到獨立於Node的定時器,那么就要是用Scheduler的定時器函數了,
在引擎根目錄/cocos/scripting/lua-bindings/manual的lua_cocos2dx_manual.cpp文件中定義了scheduleScriptFunc和unscheduleScriptEntry兩個函數,分別用來加入和刪除定時器
例子代碼如下:
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的返回值是一個定時器憑據,該憑據用於在需要刪除對應的定時器時傳入作為參數,正如上面的例子代碼所示
