Cocos2D如何暂停所有正在运行的动作?

3
我在Cocos2D应用中恢复动画比较困难。我将CCSprite添加为CCSpriteBatchNode的子项,然后执行一个动画。
所以当我点击暂停按钮时,我会这样做:
[[[CCDirector sharedDirector] actionManager] pauseAllRunningActions];

现在文档中建议使用以下方法:

[[[CCDirector sharedDirector] actionManager] resumeTargets:];

然而,我尝试了包括精灵本身、批处理节点、self(CCLayer)和当前的CCScene在内的所有可能的目标,但都没有奏效。

是否有一种可以恢复所有目标的方法?

编辑:我在一个Singleton中声明了一个NSSet,并执行以下操作:

[Singleton sharedSingleton].pauseTargets = [[[CCDirector sharedDirector] actionManager] pauseAllRunningActions];
[[[CCDirector sharedDirector] actionManager] pauseAllRunningActions];

然后,我执行以下操作:

[[[CCDirector sharedDirector] actionManager] resumeTargets:[Singleton sharedSingleton].pauseTargets];

但是我遇到了崩溃的情况:
2012-08-29 18:40:05.433 App[34872:707] -[__NSMallocBlock__ countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x1e075a40
2012-08-29 18:40:05.434 App[34872:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSMallocBlock__ countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x1e075a40'

你尝试过使用[[CCDirector sharedDirector]pause][[CCDirector sharedDirector]resume]吗? - 0xDE4E15B
不行,我不能这样做。否则我的暂停层就无法作为子节点添加。 - SimplyKiwi
场景不应该被冻结,我只想暂停并成功恢复场景中所有当前正在进行的动画。pauseAllRunningActions正是做到这一点的方法,但我不知道它暂停的目标是什么。而且也没有resumeAllRunningActions方法。 - SimplyKiwi
要恢复这些目标,请在resumeTargets:方法中传递返回的NSSet,例如:[[[CCDirector sharedDirector] actionManager] resumeTargets:theTargets]; - 0xDE4E15B
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/15990/discussion-between-urlarenzo-and-ibrad-apps - 0xDE4E15B
显示剩余4条评论
1个回答

4

暂停存储目标

NSSet *pausedTargets = [[NSSet alloc] initWithSet:[[[CCDirector sharedDirector] actionManager] pauseAllRunningActions]];

恢复暂停的目标

[[[CCDirector sharedDirector] actionManager] resumeTargets:pausedTargets];

同样不要忘记在取消暂停后释放pausedTargets

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接