暂停游戏时暂停动画然后在cocos2d中恢复

时间:2013-02-18 07:50:15

标签: objective-c cocos2d-iphone

根据我在互联网上所做的研究,我想出了这个代码来暂停和恢复游戏:

-(void)pauseGame:(UIApplication *)application{
[[CCDirector sharedDirector] pause];
//do other actions necessary}

-(void)resumeGame:(UIApplication *)application{
[[CCDirector sharedDirector] resume];
//do other actions}

这很好但我的问题是如果游戏暂停,关闭然后重新打开。通常情况下,如果你暂停一个游戏,然后关闭它,当你打开它时,一切都应该暂停。经过一些研究后,我最终在Appdelegate中使用了这段代码:

-(void) applicationDidEnterBackground:(UIApplication*)application{
if( [navController_ visibleViewController] == director_ )
    [director_ stopAnimation];

RandomScene *s = [RandomScene node];
if(s.layer.gameStatus == FALSE)
{
    [[CCDirector sharedDirector]pause];
    [[CCDirector sharedDirector]stopAnimation];
    [s.layer stopAllActions];
}}

使用此代码,当我重新打开游戏时,计时器仍会暂停以及所有触摸事件。但是,我的动画仍然有效,所以我的精灵在他们不应该的时候仍然在移动。重新打开游戏后如何完全停止动画?

2 个答案:

答案 0 :(得分:2)

为此,我建议你手动控制你的精灵.. 在主游戏场景中制作一个暂停游戏的方法。 您可以在精灵对象上使用pauseSchedulersAndActions方法暂停精灵和动画。并在您的GameScene中的resumeMethod中恢复这些操作。

通过使用CCDirector获取runningScene的引用,从AppDelegate调用这些方法。

答案 1 :(得分:2)

经过进一步的研究,我设法通过this post找到了解决问题的方法。我删除了CCDirector暂停并在pauseGame和resumeGame方法中恢复然后添加了这个:

//pause
[sprite.actionManager pauseTarget:sprite];

//resume
[sprite.actionManager resumeTarget:sprite];

这停止了动画并保持“暂停”状态,即使游戏关闭然后重新打开,我甚至不需要玩AppDelegate类:)。我希望这也有助于其他人。

更新:以防其他人使用循环创建精灵,以下是我设法为其创建暂停和恢复功能的方法:

[sprite.actionManager pauseAllRunningActions];
[sprite.actionManager resumeTargets:[NSSet setWithArray:spriteArray]];

注意两者之间的区别(resumeTarget和resumeTargets),然后由于resumeTargets会要求NSSet,我只是将数组对象传递给带有上述代码的NSSet。