0

这是关于 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

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

4

1 回答 1

1

这不是一个错误。发生的情况是您在调用时创建和运行的操作

someItem:runAction(CCCallFunc:create(someCallback))

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

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

希望这可以帮助。:)

于 2013-04-30T06:52:27.813 回答