在我的GameScene.m中,我有一个名为 wentToBackGround 的方法。此方法由AppDelegate中的 applicationWillResignActive 调用:
GameScene *gameScene = [[GameScene alloc]init];
[gameScene wentToBackground];
在goToBackGround中,我移动了我的播放器精灵(只是为了测试它是否有效),如下所示:
-(void)wentToBackground {
NSLog(@"BG");
self.player.position = CGPointMake(CGRectGetMidX(self.frame), 1000);
}
NSLog 有效,但球员位置保持不变。这是因为SpriteKit一旦进入BG就会自动暂停一切。我该如何解决这个问题。我最终希望有一个暂停菜单,一旦用户离开应用程序就会打开。 我该如何正确地做到这一点?
我认为它也可能不起作用,因为我创建了 GameScene 的新实例。我如何使用旧实例? (旧实例是在另一个场景中创建的, TitleScene )
答案 0 :(得分:2)
我认为它也可能不起作用,因为我制作了一个新的GameScene实例
正确,你懂了!做得好。请记住(我认为你现在正在抓住这个),一个类只是一个模板。应用程序中的对象是实例,您可以创建一个类的许多实例。所以当你说
时[[GameScene alloc]init]
您正在制作新实例。这是合法但毫无意义的;向它发送wentToBackground
消息没有任何用处,因为它不在您的界面中。您要与之交谈的GameScene实例(界面中的实例)位于其他地方。
获取对特定现有实例的引用可能很棘手。你有时必须事先安排好事情才能做到。但是,我认为你可以在这里避免整个问题。 UIApplication不仅具有应用委托方法,还具有通知,可让您知道您将辞职。因此,只需拥有该通知的GameScene注册表,现在您根本不必涉及应用程序代理。
以下是该通知的文档:
任何对象都可以注册通知,因此这是一种确定您的GameScene想要被告知停用的方法。