【问题标题】:Keep SpriteKit game running when backgrounded.在后台运行时保持 SpriteKit 游戏运行。
【发布时间】:2014-05-08 22:42:56
【问题描述】:

所以我正在使用 SpriteKit 开发一个横向滚动游戏,当我点击主页按钮执行其他操作然后返回我的游戏时,游戏会从开始屏幕重新开始。

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

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

【问题讨论】:

  • 从后台返回后,您的游戏在哪里恢复完全取决于您的代码。您的问题范围太广,无法提供有意义的答案。
  • @sangony 对此感到抱歉。好吧,它几乎只是一个使用大约 200mg ram(主要是纹理)的 skScene,并带有一个名为每帧的更新方法。我读过精灵套件在主线程上运行,这与它有什么关系吗?我对编码还是很陌生。 :)
  • 你是否在 viewcontroller 中呈现第一个场景而不检查 skview 是否已经有一个正在运行的场景?
  • @LearnCocos2D 实际上,我将开始使用 if (!skView.scene) 进行检查。谢谢!

标签: objective-c sprite-kit


【解决方案1】:

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

要暂停和取消暂停游戏,您可以为此保留通知。我在包含场景的视图控制器中制作了我的。在 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】:

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

How to keep an iPhone app running on background fully operational

但是,这对您的情况也不是很有帮助。

我建议在 App Delegate 方法-applicationWillTermiate: 中将游戏状态保存在NSUserDefaults 中(例如当前分数、各个节点的位置等),然后读取-applicationDidFinishLaunching: 方法中的值,以检查之前是否正在玩游戏。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-21
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多