SpriteKit暂停场景(Swift4.2)

时间:2018-11-13 15:50:19

标签: ios swift sprite-kit

我构建了一个带有暂停按钮的游戏,该按钮显示了一个新的模态ViewController,该控件带有一个在当前控件上方的“暂停”菜单,并使用以下功能(位于场景中并通过协议和委托调用)暂停了场景:

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)
}  

我认为该函数永远不会被调用,因为它在场景中,因为它暂停了而没有执行。

2 个答案:

答案 0 :(得分:1)

SKView暂停和SKScene暂停的行为不同

SKView暂停后,将不会调用场景中的更新功能

SKScene暂停后,SKView仍将调用场景中的更新函数,而场景将不会调用子节点上的更新函数。

在您的情况下,您正在SKView上暂停。这意味着您在场景上运行的任何操作都不会触发,因为永远不会发生更新。

我建议您切换为SKScene暂停,或者不使用动作来暂停和取消暂停。

答案 1 :(得分:0)

我更改了:

func pause(isPaused: Bool) {
    let pauseAction = SKAction.run {
    self.view?.isPaused = isPaused
}
    self.run(pauseAction)
}

至:

func pause(isPaused: Bool) {
    self.view?.isPaused = isPaused
}

它醒了却没有任何动作。