3

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

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

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

4

2 回答 2

2

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

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

于 2013-02-19T09:23:18.290 回答
2

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

//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。

于 2013-02-20T06:48:21.470 回答