Сцена паузы SpriteKit (Swift4.2) - PullRequest
       8

Сцена паузы SpriteKit (Swift4.2)

0 голосов
/ 13 ноября 2018

Я создал игру с кнопкой паузы, которая показывает новый модальный 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 голосов
/ 15 ноября 2018

Я изменил:

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

на:

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

просыпается без действия.

0 голосов
/ 14 ноября 2018

SKView пауза и SKScene пауза ведут себя по-разному

Когда SKView приостановлен, он не будет вызывать функции обновления на сцене

Когда SKSceneВ режиме паузы SKView будет по-прежнему вызывать функции обновления на сцене, и сцена не будет вызывать функции обновления на дочерних узлах.

В вашем сценарии вы вызываете pause для SKView.Это означает, что любое действие, которое вы выполняете на своей сцене, не будет запускаться, потому что обновление никогда не происходит.

Я рекомендую либо переключиться на SKScene pause, либо не использовать действие для приостановки и отмены.

...