簡體   English   中英

SpriteKit暫停場景(Swift4.2)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM