我有以下代碼暫停遊戲場景暫停SKScene:如何從SKView或視圖控制器
class GameProcessScene: SKScene {
...
var onPause: Bool = false {
willSet {
self.paused = newValue
self.view?.paused = newValue
}
}
...
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
for touch in touches {
let location = touch.locationInNode(self)
let possiblePauseNode = self.nodeAtPoint(location)
if (possiblePauseNode.name == "pauseButton") {
if (self.paused) {
onPause = false
} else {
onPause = true
}
return
}
...
}
}
它可以通過按下按鈕暫停。但是我也想暫停從背景出現的遊戲。我試圖從ViewController類做到這一點:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "pauseGameScene", name: UIApplicationWillEnterForegroundNotification, object: nil)
}
func pauseGameScene() {
let view = self.view as SKView
let scene = view.scene
switch scene {
case is MainMenuScene:
println("MainMenu")
case let game as GameProcessScene:
game.onPause = true
default:
println("default")
}
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
但它不起作用,當遊戲出現從背景。 任何人都可以幫忙嗎?謝謝!
UPD1:也嘗試UIApplicationWillResignActiveNotification
,UIApplicationDidEnterBackgroundNotification
但game.onPause = true
仍然無法正常工作。它將「SKScene.paused」屬性更改爲true,但當遊戲進入前景時,動作仍然在執行,即使遊戲場景在背景前暫停。
UPD2:我將觀察者和選擇器從ViewController類移到GameProcessScene:SKScene類 - 同樣的效果,「暫停」屬性更改,但實際上游戲玩法正在繼續。
是否已確認pauseGameScene其實是在叫什麼名字? – 2015-02-05 20:57:14
@Millie Smith,是的,我可以從暫停遊戲場景的當前狀態獲得遊戲場景的當前狀態,例如當前級別,玩家點數等等。它看起來像''遊戲',因爲GameProcessScene'語句是場景對象的副本,但是不參考。 – 2015-02-05 21:23:02