我已經設置播放/暫停按鈕gameLayer取消暫停來啓動應用程序後 - 在這裏:How to prevent run SKAction on paused scene (after unpaused), texture of node not change after pause/unpause scene暫停層從背景
一切工作正常,但我無奈與後臺程序。當我暫停gameLayer和應用程序去背景或當我鎖定設備時,應用程序前往後,遊戲層會自動取消暫停。如何防止這一點?
謝謝!
我已經設置播放/暫停按鈕gameLayer取消暫停來啓動應用程序後 - 在這裏:How to prevent run SKAction on paused scene (after unpaused), texture of node not change after pause/unpause scene暫停層從背景
一切工作正常,但我無奈與後臺程序。當我暫停gameLayer和應用程序去背景或當我鎖定設備時,應用程序前往後,遊戲層會自動取消暫停。如何防止這一點?
謝謝!
因此,這是對我工作:
import SpriteKit
import GameplayKit
class GameScene: SKScene {
var gameLayer = SKNode()
override func didMove(to view: SKView) {
NotificationCenter.default.addObserver(self,
selector: #selector(GameScene.pause),
name: .UIApplicationDidBecomeActive,
object: nil)
let moveUp = SKAction.moveBy(x: 0, y: 100, duration: 2)
let sequence = SKAction.sequence([moveUp, moveUp.reversed()])
let loop = SKAction.repeatForever(sequence)
let sprite = SKSpriteNode(color: .purple, size: CGSize(width: 100, height: 100))
addChild(gameLayer)
gameLayer.addChild(sprite)
sprite.run(loop)
}
func pause(){
gameLayer.speed = 0
}
override func willMove(from view: SKView) {
super.willMove(from: view)
NotificationCenter.default.removeObserver(self,
name: .UIApplicationDidBecomeActive,
object: nil)
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
gameLayer.speed = gameLayer.speed == 0 ? 1 : 0
}
}
我還沒有來得及測試更多,但我期待這樣的事情:
func pause(){
gameLayer.isPaused = true
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
gameLayer.isPaused = !gameLayer.isPaused
}
會的工作,但令人驚訝的它不是(在執行pause()
方法後節點繼續移動)。我真的不知道這是一個錯誤還是一個功能:)但恕我直言,我會說這是一個錯誤。無論如何,你可以使用速度屬性來達到你想要的。只需複製並粘貼此代碼即可瞭解其工作原理。
只需在場景中偵聽UIApplicationDidBecomeActiveNotification並採取適當的操作(暫停gameLayer)即可。如果你仍然堅持,讓我知道,我會爲你寫一個答案。 – Whirlwind
我檢查蘋果文檔,發現只有'靜態讓UIApplicationDidBecomeActive:NSNotification.Name',但我不知道如何正確使用它。例子會很棒!謝謝! –