Спрайт Кит Анимации и текстурные атласы в Swift 4
В настоящее время работает над приложением, которое требует немного анимации через массив изображений. Я провел множество исследований в Интернете о том, как решить мою проблему, но не смог ничего натолкнуть на Swift 4. Ниже мой код, он показывает первое изображение в цикле, когда я запускаю приложение, но без анимации вообще. Все выглядит хорошо, я не вижу проблем с моим кодом, но, возможно, вы, ребята, можете помочь. Цените это заранее!
let atlas = SKTextureAtlas(named: “mypic”)
var TextureArray = [SKTexture]()
var person = SKSpriteNode()
override func didMove(to view: SKView) {
person = SKSpriteNode(imageNamed: "red_1.png")
person.size = CGSize(width: 150, height: 129)
person.position = CGPoint(x: 0, y: 0)
person = SKSpriteNode(imageNamed: atlas.textureNames[0])
for i in 1...atlas.textureNames.count {
let Name = "red_\(i).png"
TextureArray.append(SKTexture(imageNamed: Name))
}
self.addChild(person)
}
override func update(_ currentTime: TimeInterval) {
let myAnimation = SKAction.animate(with: TextureArray, timePerFrame: 0.1)
person.run(SKAction.repeatForever(myAnimation))
}
1 ответ
Анимационное действие помещено в update
, который выполняется один раз за каждый кадр. Так что, если игра работает на 60 FPS, update
вызывается 60 раз в секунду. Это означает, что каждую секунду person
получает 60 новых myAnimation
действия, которые нужно выполнить.
Чтобы это исправить, рассмотрите возможность размещения анимационного действия где-то еще в вашем коде, например, сразу после добавления person
на сцену. Так как это repeatForever
действие, анимация будет выполняться так, как вы предполагали, пока либо действие не будет удалено из узла, либо узел не будет удален со сцены.
Надеюсь это поможет!