Имам следния код за пауза на игрова сцена:
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 - същият ефект, промените на свойствата са "на пауза", но всъщност играта продължава.
game
отlet game as GameProcessScene
е копие на обект на сцена, но не и препратка. - person Andrey Derbenev   schedule 06.02.2015