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类来解决这个问题。有了这个,我所要做的就是在我的课堂上为暂停和恢复方法更改一行。非常感谢你!