Я работаю над игрой для iOS на основе SpriteKit / Swift с использованием xCode, в настоящее время экспериментирую с анимацией.
Я создал класс PlayerSprite
как подкласс SKSpriteNode
и определил метод moveRight
, выполняющий следующее действие:
run(
SKAction.moveBy(x: 32.0, y: 0.0, duration: 0.25), completion: {
debugPrint("Action completed.")
}
)
Существует только один экземпляр игрока класса PlayerSprite
, который является частью дерева узлов (SKScene -> SKTileMap -> PlayerSprite). Дело в том, что указанное действие не выполнено надежно:
- Когда я запускаю приложение "в первый раз", оно запускается.
- Когда я останавливаю приложение и запускаю его снова, оно НЕ выполняется.
- Когда я нажимаю «pause» в отладчике и затем «play» снова, действие выполняется!
Это относится как к симулятору, так и к запуску приложения на подключенном iPhone. Под остановкой приложения понимается нажатие кнопки остановки в xCode и возобновление его запуска из xCode.
Цикл обновления является частью подкласса SKScene
(в данном случае называется LevelSceneView
) и выглядит следующим образом (пока просто играем):
override func update(_ currentTime: TimeInterval) {
debugPrint("Update called")
if !player.hasActions() {
player.moveRight()
}
}
Цикл обновления вызывается правильно, но действие не выполняется (согласно консоли журнала).
Кто-нибудь еще испытывал такое поведение? Любые идеи будут очень цениться. Я надеюсь, что я описал проблему адекватно. В случае каких-либо вопросов, не стесняйтесь спрашивать.