LibGDX动画中的StateTime

时间:2014-05-18 16:36:26

标签: animation libgdx

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

2 个答案:

答案 0 :(得分:3)

getKeyFrame method documentation上还有一些文档:

  

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

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

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

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

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

答案 1 :(得分:0)

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);
  }
}