cocos2d-lua中如何进行一次定时任务?找不到performWithDelay函数呀…

cocos2d-lua中如何进行一次定时任务?找不到performWithDelay函数呀…

喜欢这个问题 | 分享 | 新建回答

回答

jerkzhang

Apr 15, 2023
2 赞

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”组合使用。