lua定时器如何以节点为单位

C++版本里好像有一种定时器,是以节点为单位,如果该节点删除后对应的定时器也就自动删除了,在lua里是怎么实现呢
比如:panel->schedule( schedule_selector(PauseTest::unpause), 3);
这种写法在lua中如何写

利用 Action 来处理。在 cocos2d-x 自付的 extern.lua 中有个

function schedule(node, callback, delay)
```


这个应该能满足您所提到的需求。

以上。

如果我用cocostudio编辑出的动画,不用action,有没有办法实现,我是想删除这个动画后,随之的定时器也跟着删除

— Begin quote from ____

引用第2楼hjf7788521于2014-05-05 14:34发表的 回 1楼(saintliao) 的帖子 :
如果我用cocostudio编辑出的动画,不用action,有没有办法实现,我是想删除这个动画后,随之的定时器也跟着删除 http://www.cocoachina.com/bbs/job.php?action=topost&tid=200369&pid=944160

— End quote

坦白说,真心看不懂您的需求。

如果是指 cocostudio 动画编辑器产出的 Armature 对象,他,也是 Node 类派生出来的,为什么不能用 Action 来处理?

extern.lua 里头提供的工具函数 schedule 本就是用来处理指定 Node 对象定时调用回调函数,并且由于是将 Action 加入指定对象,所以生命周期也刚好是在对象被删除后定时功能一并被移除不是吗?

好,如果觉得这样子搞不够大气,好呗,有其他手段可以处理,绝对够大气……=A=

利用 cc.Scheduler 类的 scheduleScriptFunc( ) 可以达到使用定时器的目的,而且,这个是在 lua 内唯一操作 cc.Scheduler 的方法。不信?去看一下 lua 有绑定 cocos2d::Scheduler 哪些函数就一清二楚了。

写一小段让您看一下要怎么操作,就会知道使用这会有多么“方便”。

-- 定时器回调函数
local function callbackFunc(delta)
    print("I'm alive")
end

-- 产生一个 cocostudio::Armature 对象,至于怎么读资源的就不多解释了……
local armature = ccs.Armature:create("dummy")

-- 取得 Scheduler 单例对象,并把要定时调用的函数挂载上
     schedulerID 是挂载后返回的唯一键值,之后对象注销时会用到……接到 armature 里是偷懒,而且省事
     至于其他参数内容请自行看文件。
]]--
armature.schedulerID = cc.Director:getInstance():getScheduler():scheduleScriptFunc(callbackFunc, 1.0, false)

-- 挂载处理 NODE Event,目的是用来取得对象被移除时的时间点
armature:registerScriptHandler(function(event)
    -- 当对象被移除时就会进这里
    if event == "cleanup" then
        -- 对象都要消失了,自然要反挂载回调函数,所以刚加上的 schedulerID 就用在这里
        cc.Director:getInstance():getScheduler():unscheduleScriptEntry(armature.schedulerID)
    end
end)

就这样,稍稍复杂吧。:slight_smile:

说真的,cc.Scheduler 的 scheduleScriptFunc( ) 与 unscheduleScriptEntry( ) 这个是用来集成统一管理定时器用的,拿来做以节点为单位有些太大材小用了。

但,还是可以这么搞,嫌麻烦的话写个对象包装起来就好了。

可是呢,如果就单为了一个对象就要这么搞的话……衷心的建议还是用 extern.lua 里的工具函数,简单又直觉。

以上!

node:scheduleUpdateWithPriorityLua(lua_function, delaytime)

不好意思,我是一个初学者,我还想请教一下如何用Action 调用extern.lua的schedule方法,能写一个简单例子给我吗
另 armature 用removeFromParent()删除节点后,还没有退出场景时,不用做清理工作吧,当退出场景时如何做清理工作

喔喔!都忘了还有这个函数可以用。

先前在 rc0 时其实有留意过 Node 的 scheduleUpdateWithPriorityLua( ),问题出在于函数的第二参数并不是 delay time,是 priority。

也就是每一帧都会被调用,无法设置 delay interval,之于这个原因所以这个函数就被遗忘了wwww

anyway,感谢提醒……免得我把人带到奇怪的坑去。QAQ

哦 谢谢提醒 我也是菜鸟

坐看前面装得一手好b