循环后调用runAction()。好吗?

时间:2013-04-29 09:10:40

标签: cycle cocos2d-x

这是lua的样本

for i=1,n do
    cclog(""..i)
    someItem:runAction(CCCallFunc:create(someCallback))
end

所以首先在控制台日志中打印ni,然后才运行runAction n次,以便调试输出看起来像

1
2
3
4
...
n
someCallback
someCallback
someCallback
someCallback
...
someCallback

它是一种内存泄漏保护还是一个bug

1 个答案:

答案 0 :(得分:1)

这不是一个错误。当您调用

时创建和运行的操作会发生什么
someItem:runAction(CCCallFunc:create(someCallback))

被添加到someItem的动作管理器中。对于在节点上运行的所有操作都会发生这种情况。默认情况下,新节点的操作管理器取自导向器,因此默认情况下所有节点共享同一个操作管理器。在runAction调用期间,只会发生这种情况。更新操作管理器后,将更新这些操作。导演中的动作管理器设置为每帧更新一次。在此更新期间,您将获得“someCallback”输出,这就是输出cclog(“”.. i)之后输出的原因。

CCCallFunc操作在运行后立即删除。其他一些操作(例如CCMoveTo)会在动作管理器中保留更长的时间。在每次更新操作管理器期间,操作本身都会更新并检查是否应将其删除。 CCCallFunc所做的是它在更新时调用它的回调,然后在动作管理器询问时说它已完成。因此,每次操作仅调用一次回调,然后删除该操作。

希望这会有所帮助。 :)