2

我对 SpriteKit 游戏有一个奇怪的问题。当用户打开通知中心或控制中心时,应用程序崩溃。我希望在调用时暂停 worldNode 层并显示 menuNode 层,applicationWillResignActive当按下主页按钮时它工作正常。我尝试从AppDelegate函数中暂停我的游戏,并且尝试在游戏开始applicationWillResignActive时暂停。当使用 Home Button/Home Gesture 时,applicationDidBecomeActive我尝试NotificationCenter在这两项工作中使用该方法。ViewController我应该如何处理?或者这只是 iOS 11 中的一个错误?

我的viewDidLoad方法中有这个ViewController

NotificationCenter.default.addObserver(self, selector:  #selector(appWillResignActive), name: NSNotification.Name.UIApplicationWillResignActive, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(appDidBecomeActive), name: NSNotification.Name.UIApplicationDidBecomeActive, object: nil)

然后每个选择器如果尝试在appDidBecomeActiveappWillResignActive

@objc func appDidBecomeActive() {
    print("appDidBecomeActive")

    if GameScene.sharedInstance != nil {
        print("presentingMenu")
        GameScene.sharedInstance.presentMenuNode()
    }
}

@objc func appWillResignActive() {
    print("appWillResignActive")

    if GameScene.sharedInstance != nil {
        print("presentingMenu")
        GameScene.sharedInstance.presentMenuNode()
    }

}

我觉得我可能试图以错误的方式处理这个问题,但我不明白为什么当 Home 按钮/Home 手势被触发时它会起作用?

编辑:经过更多测试,我发现在 iOS 10 设备上运行时一切正常。但是,当我运行苹果从他们的示例代码中提供的 DemoBots 应用程序时,它不会在 iOS 11 上崩溃,并且基本上可以做我想做的事情,所以必须有更好的方法来处理游戏状态的转换,任何输入表示赞赏。

4

0 回答 0