SpriteKit - 动态改变动画速度

时间:2021-07-27 22:44:02

标签: swift animation sprite-kit skaction

我是 SpriteKit 框架的新手,无法弄清楚如何执行以下操作:

在场景中间,我有一个精灵,我对其应用了 .animateWithTextures SKAction。现在我只想提高该动画的速度,或减少其持续时间以获得相同的效果。

我将 SKAction 作为我的 GameScene 类的一个属性,这样我就可以从任何地方访问它的属性,但改变它的速度和持续时间都不会影响动画。

我阅读了几个线程,最接近我的问题的是这个:

How to change duration of executed SpriteKit action

这是七年前的,没有一个答案对我有用。

这基本上是我所做的:

class GameScene: SKScene {

   var thePlayer: SKSpriteNode = SKSpriteNode()
   var playerAnimation: SKAction?   
   ...
   ...

   func setInitialAnimation() {
   
      let walkAnimation = SKAction.repeatForever(SKAction(named: "PlayerWalk", duration: 1)!)
      self.playerAnimation = walkAnimation
      self.thePlayer.run(walkAnimation)
   }

   func changeAnimationDuration(to duration: CGFloat) {

      self.playerAnimation?.duration = duration
   }
}

当 setInitialAnimation 方法被调用时动画开始,但改变动作的持续时间没有效果。到目前为止唯一有效的是从玩家精灵中删除旧动作并运行一个新动作。

是否应该无法更改正在运行的 SKAction 的属性,还是某种即发即弃的机制?

1 个答案:

答案 0 :(得分:0)

调整 timePerFrame 以获得正确的动画速度。

var frames = [SKTexture]()
                        
 for i in 1...10 {
     frames.append(SKTexture(imageNamed: "YourTextureAnimationFrame\(i)"))
 }
                       
 let animate = SKAction.animate(with: frames, timePerFrame: 0.025) 
 //timePerFrame setting the speed of the animation.

 node.run(animate)