【问题标题】:SpriteKit - change animation speed dynamicallySpriteKit - 动态改变动画速度
【发布时间】:2021-10-03 17:30:29
【问题描述】:

我是 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 的属性,或者这是某种“一劳永逸”的机制?

【问题讨论】:

标签: swift animation sprite-kit skaction


【解决方案1】:

玩弄 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)

【讨论】:

    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多