#swift #xcode #sprite-kit #skscene
#swift #xcode #sprite-kit #skscene
Вопрос:
Я пишу программу, использующую Swift3 в Xcode. Я использую SpriteKit и SKScene в своей программе. Как вы знаете, в gamescene.sks есть предопределенная функция обновления, которая всегда выполняется (даже при изменении представления).
Я знаю, что «self.scene.view.paused = YES;» не работает для функций обновления, которые вызываются всегда.
Есть ли какой-либо способ приостановить и остановить SKScene и его функцию обновления?
Комментарии:
1. О чем вы говорите? View.paused останавливает просмотр от вызова методов обновления spritekits, scene.pause останавливает все дочерние элементы, но обновление все равно происходит
2. @Knight0fDragon вы всегда комментируете мои вопросы, но опять же всегда ничего не говорите. Я спрашиваю, как я могу приостановить / остановить функцию обновления. Другими словами, я говорю, как я могу сделать так, чтобы обновление все еще не происходило. Я знаю, что «self.scene.view.paused = YES;» не останавливает обновление, и я спрашиваю, как это сделать, человек.
3. тогда вы не поняли мой комментарий: «self.scene.view.paused = YES;» Приостанавливает обновление, поэтому я в замешательстве
Ответ №1:
Apple DemoBot — это всегда хороший проект, который стоит проверить.
Лучший способ приостановить вашу игру — создать мировой узел и приостановить этот узел вместо приостановки SKView.
let worldNode = SKNode()
добавьте его в didMoveToView в вашем GameScene.
addChild(worldNode)
Затем добавьте все узлы (или SKActions), которые вы хотите приостановить, в worldNode
worldNode.addChild(SOMENODE)
worldNode.addChild(SOMENODE2)
Чем в вашем методе паузы, который вы говорите
worldNode.isPaused = true
physicsWorld.speed = 0
и в вашем методе возобновления вы говорите
worldNode.isPaused = false
physicsWorld.speed = 1
Чем для метода обновления, вы можете завершить работу раньше, если worldNode приостановлен
override func update(_ currentTime: TimeInterval) {
guard !worldNode.isPaused else { return }
// rest of your code
}
Надеюсь, это поможет.