SpriteKit - 动态改变动画速度

问题描述

我是 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 的属性,还是某种即发即弃的机制?

解决方法

调整 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)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...