gpt4 book ai didi

ios - 为什么 applicationWillResignActive 方法不起作用?

转载 作者:行者123 更新时间:2023-11-28 21:51:31 24 4
gpt4 key购买 nike

在我的 GameScene.m 中,我有一个名为 wentToBackGround 的方法。此方法由 AppDelegate 中的 applicationWillResignActive 调用:

GameScene *gameScene = [[GameScene alloc]init];
[gameScene wentToBackground];

在 wentToBackGround 中,我像这样移动我的玩家 Sprite (只是为了测试它是否有效):

-(void)wentToBackground {
NSLog(@"BG");
self.player.position = CGPointMake(CGRectGetMidX(self.frame), 1000);
}

NSLog 有效,但玩家位置保持不变。这是不是因为SpriteKit一进入BG就自动暂停一切。我该如何解决这个问题。我最终希望有一个暂停菜单,在用户离开应用程序时立即打开。 我该如何正确执行此操作?

我认为它也可能不起作用,因为我创建了一个新的 GameScene 实例。如何使用旧实例? (旧实例是在另一个场景 TitleScene 中创建的)

最佳答案

I think it also might not work, because I made a new instance of the GameScene

没错,你明白了!做得好。请记住(我想您现在已经掌握了这一点)类只是一个模板。应用程序中的对象是实例,您可以为一个类创建多个实例。所以当你说

[[GameScene alloc]init]

您正在制作一个 实例。这是合法的,但毫无意义;向它发送 wentToBackground 消息没有任何用处,因为它不在您的界面中。您想要与之交谈的 GameScene 实例,即您界面中的实例,在其他地方。

获取对特定现有实例的引用可能很棘手。有时您必须提前安排事情才能使其成为可能。但是,我认为您可以在这里避免整个问题。 UIApplication 不仅有一个应用程序委托(delegate)方法,还有一个通知,让您知道您将退出事件状态。因此,只需让 GameScene 注册该通知,现在您根本不需要涉及应用委托(delegate)。

这是关于该通知的文档:

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/#//apple_ref/c/data/UIApplicationWillResignActiveNotification

任何对象都可以注册一个通知,因此这是一种确定您的 GameScene 希望收到停用通知的方法。

关于ios - 为什么 applicationWillResignActive 方法不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28137073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com