[英]SpriteKit pause Scene (Swift4.2)
我構建了一個帶有暫停按鈕的游戲,該按鈕顯示了一個新的模態ViewController,其上方具有一個Pause菜單,並使用以下功能(位於場景中並通過協議和委托調用)暫停了場景:
func pause(isPaused: Bool) {
let pauseAction = SKAction.run {
self.view?.isPaused = isPaused
}
self.run(pauseAction)
}
暫停場景並顯示模態視圖控制器是可行的,但是當我通過隨意的選擇返回場景時,場景並不會取消暫停。
暫停按鈕與場景在同一視圖中。 為了從“暫停”菜單中與場景進行通信,我使用了一個展開序列,通過“協議”和“委托”在其中調用暫停功能。
我提出了暫停菜單:
@IBAction func PauseMenuButton(_ sender: Any) {
let vc = storyboard!.instantiateViewController(withIdentifier: "PauseMenuVC")
vc.providesPresentationContextTransitionStyle = true
vc.definesPresentationContext = true
vc.modalPresentationStyle = .overCurrentContext
present(vc, animated: true, completion: nil)
SceneIsPausedDelegate.pause(isPaused: true)
}
然后回到現場:
@IBAction func unwindToGameVC(segue: UIStoryboardSegue) {
SceneIsPausedDelegate.pause(isPaused: false)
}
我認為該函數永遠不會被調用,因為它在場景中,因為它暫停了而沒有執行。
SKView
暫停和SKScene
暫停的行為不同
暫停SKView
,它不會在現場調用更新功能
當SKScene
暫停, SKView
仍將呼吁現場的更新功能,場面不會叫孩子節點上的更新功能。
在您的方案中,您要在SKView
上調用暫停。 這意味着您不會在場景上運行任何動作,因為永遠不會發生更新。
我建議要么切換到SKScene
暫停,要么不使用動作來暫停和取消暫停。
我變了:
func pause(isPaused: Bool) {
let pauseAction = SKAction.run {
self.view?.isPaused = isPaused
}
self.run(pauseAction)
}
至:
func pause(isPaused: Bool) {
self.view?.isPaused = isPaused
}
它醒了,沒有任何動作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.