isPaused
- ошибка в мире SpriteKit. Я в буквальном смысле поспорил с разработчиками в Apple о его нарушенной природе, и они утверждают, что именно так оно и должно работать, и мы должны с этим справиться. Последнее злодеяние, о котором я знаю, это то, что isPaused
по умолчанию устанавливается в true для новых сцен, а затем отправляется сообщение, чтобы остановить его. Кроме того, когда вы отключаете родительский узел, он также останавливает все дочерние узлы.
Таким образом, в вашем коде здесь переопределите isPaused
вашей сцены, чтобы иметь возможность захватить событие приостановки, чтобы заблокировать его переход к дочерним элементам
class BMScene: SKScene {
let gameLayer = SKNode()
private var _paused : Boolean = false
override var isPaused : Boolean
{
get
{
return _paused
}
set
{
_paused = newValue
}
}
func pauseGame(_ state: Boolean? = null){
gameLayer.isPaused = state ?? !gameLayer.isPaused
}
override func didMove(to view: SKView) {
self.pauseGame(true)
}
}
Это остановит ваш узел от изменения состояния паузы для детей. После этого момента вы должны полностью контролировать состояние паузы gameLayer, и оно должно отображаться так, как вы думаете.
Я также изменил вашу функцию, чтобы вы могли форсировать состояние паузы, а также переключаться, когда вы хотите поменять состояние.
* 1013 Е.Г. *
Pause:
pauseGame(true)
'gameLayer.isPaused is now true
Unpause:
pauseGame(true)
'gameLayer.isPaused is now false
Toggle:
pauseGame()
'gameLayer goes from false to true, or true to false
??
Означает COALESCE, поэтому, если state
равно нулю, оно будет перемещаться по цепочке к следующему значению, которое равно !gameLayer.isPaused