Cocos2d iphone 如何在Cocos2d中暂停和恢复

Cocos2d iphone 如何在Cocos2d中暂停和恢复,cocos2d-iphone,delay,resume,Cocos2d Iphone,Delay,Resume,所以我的想法是使用一种特殊的子弹来冻结敌人,一段时间后,敌人会自行解冻并继续他们的动作/动画。以下是我所做工作的简单版本: -(void)update:(ccTime)dt { CCSprite *enemySprite; CCARRAY_FOREACH(enemies, enemySprite) { if (CGRectIntersectsRect(_bullet.boundingBox, enemySprite.boundingBox))

所以我的想法是使用一种特殊的子弹来冻结敌人,一段时间后,敌人会自行解冻并继续他们的动作/动画。以下是我所做工作的简单版本:

-(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时,已经暂停的enemySprite将不会得到更新!我希望我知道一个更好的解释方法,但我认为任何一个专家程序员都会立即发现这段代码的错误。 请帮助我的建议,以改善代码,甚至只是一个想法将不胜感激,谢谢你的时间

你打过电话吗?:)

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

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

[enemySprite.actionManager pauseTarget:enemySprite];

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

哦,伙计,您立即解决了我的问题。非常感谢你,你太棒了!我一直在使用AppDelegate类来解决这个问题。有了这个,我所要做的就是在我的课堂上为暂停和恢复方法更改一行。非常感谢你!