Objective c 游戏暂停时停止动画,然后在cocos2d中继续

Objective c 游戏暂停时停止动画,然后在cocos2d中继续,objective-c,cocos2d-iphone,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}

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

-(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];
}}

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

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


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

经过进一步研究,我设法找到了解决我遇到的问题的方法。我在pauseGame和resumeGame方法中删除了CCDirector暂停和恢复,然后添加了以下内容:

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

//resume
[sprite.actionManager resumeTarget:sprite];
这停止了动画并保持“暂停”状态,即使游戏关闭后重新打开,我甚至不需要玩AppDelegate类:)。我希望这对其他人也有帮助

更新:为了防止其他人使用循环创建精灵,下面是我如何为它创建暂停和恢复功能的:

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

请注意这两个(resumeTarget和resumeTarget)之间的区别,因为resumeTarget会请求NSSet,所以我只是用上面的代码将数组对象传递到NSSet中。

我刚刚尝试了你的建议,但我的精灵仍然在移动。我在普通方法中的动画不是时间表,所以我在init方法中这样称呼它:[self methodName]。我在进一步研究后能够修复它。我会发布我所做的。谢谢你的帮助。