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