将应用程序带回前景时无法取消暂停游戏

时间:2015-08-04 02:52:31

标签: ios swift sprite-kit

SpriteKit会在我的应用程序进入后台时自动暂停。这很好,除非它在应用再次变为活动状态时保持暂​​停状态。我试图在相应的应用程序事件中取消暂停游戏,但无济于事。我手动取消暂停构成应用的两个SKViews和游戏Scene。从AppDelegate文件中:

func applicationWillEnterForeground(application: UIApplication) {

    if let vw = self.window?.rootViewController {
        let gc = vw as! GameViewController
        let parView = gc.view as! SKView
        parView.paused = false
        gc.gameView.paused=false
        gc.gameScene.paused=false
        println("paused = \(gc.gameScene.paused)")

    }

}

func applicationDidBecomeActive(application: UIApplication) {

    if let vw = self.window?.rootViewController {
        let gc = vw as! GameViewController
        let parView = gc.view as! SKView
        parView.paused = false

        gc.gameView.paused=false
        gc.gameScene.paused=false
        println("paused = \(gc.gameScene.paused)")

    }

}

最后我打印暂停状态。如果我点击设备的Home键然后返回应用,则会根据需要打印false。但是,在某处(不是我的代码),这会立即回到true,游戏仍然暂停。

更新

我覆盖了场景的paused属性,在给定事件中取消暂停后,它肯定会被设置回true。令人困惑,因为通过阅读其他问题,sprite工具包的典型行为是在重新激活应用程序时自动取消暂停游戏。然而,它对我来说恰恰相反。

1 个答案:

答案 0 :(得分:0)

好吧,我基本上放弃了试图控制游戏在应用状态变化期间暂停/恢复的情况。相反,我覆盖了场景的paused属性,所以现在我只能检测精灵套件决定暂停或恢复,并相应地处理它。我怀疑我的应用程序中SKViews的层次结构可能不是常规的,并且可能导致sprite kit难以控制场景状态,但这只是猜测。