在后台运行时保持SpriteKit游戏运行。

时间:2014-05-08 22:42:56

标签: objective-c sprite-kit

所以我正在使用SpriteKit进行侧滚动游戏,当我点击主页按钮做其他事情然后返回我的游戏时,游戏从开始画面重新开始。

我怎样才能保持在游戏中的位置?

非常感谢你的帮助!!!! :)

3 个答案:

答案 0 :(得分:1)

你不能让游戏在后台保持当前状态,因为iOS会在需要时立即将其从内存中删除。您可以将操作在后台运行一段有限的时间,如此问题所示:

How to keep an iPhone app running on background fully operational

但是,这对你的情况也没有多大帮助。

我建议在NSUserDefaults中保存您的游戏状态(当前得分,各种节点的位置等项目),然后阅读-applicationWillTermiate:中的值,然后读取{{1}中的值方法,检查以前是否正在播放游戏。

答案 1 :(得分:1)

你可能想做的是暂停游戏并检查场景是否已经创建的组合。当应用程序进入后台时,您将需要使用暂停方法来暂停游戏。然后在它回来时取消暂停。此外,当它返回时,检查场景是否已创建,如果它没有创建另一个场景,就像你的应用程序正在做的那样。

要暂停和取消暂停游戏,您可以保留相应的通知。我在视图控制器中创建了我的场景。在viewDidLoad方法中添加..

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterBackground) name:UIApplicationDidEnterBackgroundNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(willEnterForeground) name:UIApplicationWillEnterForegroundNotification object:nil];

然后对于选择器我使用这些方法。

- (void)willEnterForeground
{
SKView *skView = (SKView *)self.view;
skView.scene.paused = NO;
[[SKTAudio sharedInstance] resumeBackgroundMusic];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
}

- (void)willEnterBackground
{
SKView *skView = (SKView *)self.view;
skView.scene.paused = YES;
[[SKTAudio sharedInstance] pauseBackgroundMusic];
[[AVAudioSession sharedInstance] setActive:NO error:nil];
}

为确保您不会重新制作场景,请在制作场景时检查是否已制作场景。通过检查场景是否为零。像...这样的东西。

if (!skView.scene) { make your scene here }

答案 2 :(得分:0)

确保您的应用的info.plist文件中没有将属性“UIApplicationExitsOnSuspend”或“应用程序无法在后台运行”设置为YES。如果是这样,您的应用将始终在转到后台时终止。