cocos2dx-lua 延遲調用函數和定時器


下面是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的返回值是一個定時器憑據,該憑據用於在需要刪除對應的定時器時傳入作為參數,正如上面的例子代碼所示


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM