我希望我的SKScene
在按下主屏幕按钮或游戏中断时能够暂停。
在我的AppDelegate.swift
文件中,有一个NSNotification
发送出去:
func applicationWillResignActive(_ application: UIApplication) {
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "pause"), object: nil)
}
func applicationDidEnterBackground(_ application: UIApplication) {
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "pause"), object: nil)
}
在GameScene.swift
中,我有以下代码将在NSNotification
中拾取sceneDidLoad()
:
NotificationCenter.default.addObserver(self, selector: #selector(GameScene.paused), name: NSNotification.Name(rawValue: "pause"), object: nil)
这将导致该函数被调用。
@objc func paused() {
print("test")
self.isPaused = true
}
在游戏过程中按下主屏幕按钮时,控制台会打印“ test”,但场景不会暂停。
我可以在update()
函数中手动暂停所有精灵。但是,如果有一种方法可以暂停场景本身,我会更喜欢它,因为它不需要存储所有精灵的速度,以便在游戏未暂停时它们可以以相同的速度和方向移动,从而节省了时间并使其更易于操作。添加新的精灵。
我注意到了我的类似问题,很遗憾,他们没有回答我的问题。
This问题来自和我有同样问题的人,不幸的是,答案表明SpriteKit在中断时会自动暂停游戏似乎不再成立,我的精灵仍然会在游戏过程中移动。在后台。
另外,this similar question的答案对我不起作用,因为它们不会暂停游戏或,或者将每个精灵的速度设置为dx
和{{1 dy
中的}},在我的情况下两者都是必需的。
答案 0 :(得分:1)
您可以这样设置UIApplication.willResignActiveNotification
的观察者,而无需使用您的自定义通知:
let notificationCenter = NotificationCenter.default
notificationCenter.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.willResignActiveNotification, object: nil)
@objc func appMovedToBackground {
// You will need to pause the game here, save state etc.
// e.g. set SKView.isPaused = true
}
Apple的 This page包含更多信息。它指出SKView.isPaused
应该在将应用程序发送到后台时自动设置。
要考虑的一点。如果节点的移动基于相对于绝对时间点的计时器,则将具有更新位置的效果,就像它们在后台移动一样。
最后,您是在isPaused
上致电SKScene
吗?