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工具包的典型行为是在重新激活应用程序时自动取消暂停游戏。然而,它对我来说恰恰相反。
答案 0 :(得分:0)
好吧,我基本上放弃了试图控制游戏在应用状态变化期间暂停/恢复的情况。相反,我覆盖了场景的paused
属性,所以现在我只能检测精灵套件决定暂停或恢复,并相应地处理它。我怀疑我的应用程序中SKViews
的层次结构可能不是常规的,并且可能导致sprite kit难以控制场景状态,但这只是猜测。