内容
Swift3.0 XCODE8 SpriteKit ホームボタンを押したときのポーズ設定
ホームボタン押したときにバックグラウンドにアプリが切り替わり、そして、フォアグラウンドになると動き出すけど、何も処理を入れないとTimerが待機してて、フォアグラウンドに切り替わると複数のオブジェクトが重なり合ってしまった。
AppDelegate.swift
func applicationWillResignActive(_ application: UIApplication) { //ホームボタンが押されるとPause状態にする NotificationCenter.default.post(name: NSNotification.Name(rawValue: "PauseGameScene"), object: self)//PauseGameScen is method if let view = window?.rootViewController?.view as? SKView {//import SpriteKitを忘れずに view.scene?.isPaused = true print ("applicationWillResignActive , isPaused = true") } }
func applicationDidBecomeActive(_ application: UIApplication) { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. NotificationCenter.default.post(name: NSNotification.Name(rawValue: "resumeGameScene"), object: self)//PauseGameScen is method if let view = window?.rootViewController?.view as? SKView { view.scene?.isPaused = false print ("applicationDidBecomeActive , isPaused = false") } }
GameScene.swift
override func didMove(to view: SKView)
略
PauseGameSceneとあるけどシーンクラスではなくて関数メソッドです。
これは、複数のシーンクラスで構成してても良さそう。
//ホームボタンが押されるとPause状態にする NotificationCenter.default.addObserver(self, selector: #selector(self.PauseGameScene), name: NSNotification.Name(rawValue: "PauseGameScene"), object: nil) //resume NotificationCenter.default.addObserver(self, selector: #selector(self.resumeGameScene), name: NSNotification.Name(rawValue: "resumeGameScene"), object: nil)