如何在 Cocos2d 中暂停和恢复

Posted

技术标签:

【中文标题】如何在 Cocos2d 中暂停和恢复【英文标题】:How to pause and resume in Cocos2d 【发布时间】:2013-02-07 21:53:52 【问题描述】:

所以我的想法是有一个特殊的子弹来冻结敌人,一段时间后敌人解冻并继续他们的动作/动画。这是我所做的一个简单版本:

-(void)update:(ccTime)dt

     CCSprite *enemySprite;
     CCARRAY_FOREACH(enemies, enemySprite)
     
         if (CGRectIntersectsRect(_bullet.boundingBox, enemySprite.boundingBox))
         
               _bullet.visible = NO;
               [enemySprite pauseSchedulerAndActions];
               enemySprite.pausingDuration = CACurrentMediaTime() +5;
         
         if (CACurrentMediaTime() > enemySprite.pausingDuration)
              [enemySprite resumeSchedulerAndActions];
     

现在,我想我遇到的问题是enemySprite已经停止更新它的调度程序,所以下次调用更新方法时,已经暂停的enemySprite不会得到更新!我希望我知道一种更好的解释方式,但我认为任何专业的程序员都会立即看到这段代码有什么问题。 请帮助我提出改进代码的建议,或者甚至只是一个想法将不胜感激,谢谢您的时间。

【问题讨论】:

【参考方案1】:

你打电话了吗? :)

是的,pauseSchedulerAndActions 以及 Director 的 pause 方法都是实现暂停的糟糕方法,因为您无法控制暂停的内容以及可以继续运行的内容(例如暂停菜单层)。

在您的情况下,您至少可以更具体一些,例如只暂停操作,而不是计划更新:

[enemySprite.actionManager pauseTarget:enemySprite];

对于更细粒度的控制,建议不要过于依赖每个对象中的预定方法,而是让一个中心对象(场景或图层)将所有更新发送给它的子对象 - 这样您以后可以更轻松地决定哪些子对象应该会在暂停期间继续接收更新。

【讨论】:

天哪,你立即解决了我的问题。非常感谢,你太棒了 太棒了!我一直在玩 AppDelegate 类来解决这个问题。有了这个,我所要做的就是在我的课堂上为 pause 和 resume 方法更改一行。非常感谢!

以上是关于如何在 Cocos2d 中暂停和恢复的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中暂停和恢复音频

如何在 iphone 中暂停和恢复 NSTimer

如何在 C++ 中暂停和恢复 POSIX 线程?

如何在 iOS 应用程序中暂停和恢复上传过程?

如何使用 threading 模块暂停和恢复线程?

如何暂停和恢复 GameLoop?