【问题标题】:StateTime in LibGDX AnimationLibGDX 动画中的 StateTime
【发布时间】:2014-07-06 14:54:10
【问题描述】:

如何在 LibGDX 中使用已实现的动画?我知道,可以在here 找到文档,但是当我想从动画中获取帧时,我需要使用 stateTime,文档中的任何地方都没有解释。那么问题来了,就 LibGDX 的 Animation 而言 stateTime 是什么?

【问题讨论】:

    标签: animation libgdx


    【解决方案1】:

    getKeyFrame method documentation 上有更多文档:

    根据所谓的状态时间返回一个 TextureRegion。这是对象在此动画实例表示的状态下花费的秒数,例如跑步、跳跃等。

    (这个文档对我来说也没有任何意义。)

    但是,Animation.java source 是可读的。看起来它归结为 getKeyFrameIndex 它将stateTime 除以frameDuration(这是构造函数的参数——每帧持续多长时间)来计算数组索引。 getKeyFrameIndex 对循环或非循环序列做了不同的事情,但基本上它需要数组索引来查找要显示的序列中的正确关键帧。

    所以“stateTime”是从动画中选择关键帧的输入。该文档假设您有一个 Animation 实例用于“运行”,另一个用于“跳跃”(这些是它所指的“状态”)。要在Animation 中找到正确的关键帧,请告诉它您处于这种“状态”的时间。所以,如果你已经在“运行”Animation 实例中持续了 1.2 秒,它会做一些数学运算来确定要显示哪个关键帧(假设你已经用 30 帧初始化了实例,显示时间为 0.0333 秒并循环-- 它选择第 6 帧)。

    wiki https://github.com/libgdx/libgdx/wiki/2D-Animation 有更多细节和示例,但也没有直接解决这个问题。

    【讨论】:

      【解决方案2】:
      animationFrames = walkSheetArray[moveDirection];
      animation = new Animation(1f / 5f, animationFrames);
      myAnimatedActor = new AnimatedActor(animation);
      stage.addActor(myAnimatedActor);
      
      public class AnimatedActor extends Image {
          private float stateTime = 0;
          Animation animation;
          public AnimatedActor(Animation animation) {
              super(animation.getKeyFrame(0));
              this.animation = animation;
          }
      
          @Override
          public void act(float delta) {
              ((TextureRegionDrawable) getDrawable()).setRegion(animation.getKeyFrame(stateTime += delta, true));
              super.act(delta);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-15
        • 2018-06-04
        • 2016-10-17
        • 2015-11-20
        • 2012-05-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多