如何在Cocos2d中暂停和恢复

时间:2013-02-07 21:53:53

标签: cocos2d-iphone delay resume

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

-(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已停止更新其调度程序,因此下次调用update方法时,暂停的enemySprite将无法更新!我希望我知道一个更好的解释方法,但我认为任何专家程序员都会立即看到这个代码有什么问题。 请帮助我提出改进代码的建议,甚至只是一个想法将不胜感激,谢谢你的时间。

1 个答案:

答案 0 :(得分:3)

你喊了吗? :)

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

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

[enemySprite.actionManager pauseTarget:enemySprite];

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