cocos2d-lua中如何进行一次定时任务?找不到performWithDelay函数呀…
jerkzhang
performWithDelay函数已经被废弃了,该函数如下:
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
可以自定义上述函数来使用;但是并不建议。(备注:后面会反转,还是继续使用这个废弃的函数吧)
延伸说一下,以前的schedule也废弃了,以前的如下所示:
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
都是基于cc.Sequence来实现的。因为废弃了,所以不建议这么使用。
上述这些都已经成为具体节点自身的方法了。可以参考cocos2d-x的API对于Node的“Scheduler and Timer”的这些API,如果是定时任务的话,直接使用“scheduleOnce”。
C++的“scheduleOnce”说明:
void scheduleOnce (SEL_SCHEDULE selector, float delay) Schedules a selector that runs only once, with a delay of 0 or larger. More... void scheduleOnce (const std::function< void(float)> &callback, float delay, const std::string &key) Schedules a lambda function that runs only once, with a delay of 0 or larger. More...
Lua的“scheduleOnce”说明:
... 竟然没有 ... 看来是lua-binding没有完成这个吧
因此,还是继续手动重新定义与使用废弃的函数吧:
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
此外个人的观点是不要过于依赖上述的这个函数,设置过多的这类定时器是对资源的一种浪费;理解其本质更重要;即“cc.DelayTime:create(delay)”和“cc.Sequence”组合使用。