我构建了一个带有暂停按钮的游戏,该按钮显示了一个新的模态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)
}
我认为该函数永远不会被调用,因为它在场景中,因为它暂停了而没有执行。
答案 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
}
它醒了却没有任何动作。