这是lua的样本
for i=1,n do
cclog(""..i)
someItem:runAction(CCCallFunc:create(someCallback))
end
所以首先在控制台日志中打印n
行i
,然后才运行runAction
n
次,以便调试输出看起来像
1
2
3
4
...
n
someCallback
someCallback
someCallback
someCallback
...
someCallback
它是一种内存泄漏保护还是一个bug
答案 0 :(得分:1)
这不是一个错误。当您调用
时创建和运行的操作会发生什么someItem:runAction(CCCallFunc:create(someCallback))
被添加到someItem的动作管理器中。对于在节点上运行的所有操作都会发生这种情况。默认情况下,新节点的操作管理器取自导向器,因此默认情况下所有节点共享同一个操作管理器。在runAction调用期间,只会发生这种情况。更新操作管理器后,将更新这些操作。导演中的动作管理器设置为每帧更新一次。在此更新期间,您将获得“someCallback”输出,这就是输出cclog(“”.. i)之后输出的原因。
CCCallFunc操作在运行后立即删除。其他一些操作(例如CCMoveTo)会在动作管理器中保留更长的时间。在每次更新操作管理器期间,操作本身都会更新并检查是否应将其删除。 CCCallFunc所做的是它在更新时调用它的回调,然后在动作管理器询问时说它已完成。因此,每次操作仅调用一次回调,然后删除该操作。
希望这会有所帮助。 :)