Cycle 在循环后调用runAction()。可以吗?

Cycle 在循环后调用runAction()。可以吗?,cycle,cocos2d-x,Cycle,Cocos2d X,这是lua的样品 for i=1,n do cclog(""..i) someItem:runAction(CCCallFunc:create(someCallback)) end 因此,首先在控制台日志中,它用i打印n行,然后只运行runActionn次,所以调试输出如下所示 1 2 3 4 ... n someCallback someCallback someCallback someCallback ... someCallback 它是一种内存泄漏保护还是一个bug

这是lua的样品

for i=1,n do
    cclog(""..i)
    someItem:runAction(CCCallFunc:create(someCallback))
end
因此,首先在控制台日志中,它用
i
打印
n
行,然后只运行
runAction
n
次,所以调试输出如下所示

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

它是一种内存泄漏保护还是一个bug它不是bug。发生的情况是,在调用时创建和运行的操作

someItem:runAction(CCCallFunc:create(someCallback))
添加到someItem的操作管理器。在节点上运行的所有操作都会发生这种情况。默认情况下,新节点的操作管理器取自控制器,因此默认情况下所有节点共享同一个操作管理器。在runAction调用过程中不会发生更多的情况。这些操作稍后在更新操作管理器时更新。控制器中的操作管理器设置为每帧更新一次。就是在这个更新过程中,您得到了“someCallback”输出,这就是为什么输出在cclog(“.i”)的输出之后

CCCallFunc操作在运行后立即被删除。其他一些操作(例如CCMoveTo)会在操作管理器中保留更长的时间。在操作管理器的每次更新过程中,都会更新操作本身,并检查是否应删除这些操作。CCCallFunc所做的是,当它被更新时调用它的回调函数,然后在操作管理器请求时说它完成了。因此,每个操作只调用一次回调,然后删除该操作


希望这有帮助。:)

你能更详细地描述一下吗?对正在发生的事情再详细阐述一下。