我该怎么在LibGDX中使用已实现的动画?我知道文档可以在这里找到,但当我想从动画中获取某个帧时,我需要使用stateTime,而文档中没有任何关于它的解释。因此问题是,在LibGDX的动画中,stateTime是什么意思?
对于 getKeyFrame方法文档,它返回基于所谓状态时间的TextureRegion。状态时间是指物体在此动画实例表示的状态下花费的秒数,例如奔跑,跳跃等等。
但是,Animation.java源码是可读的。看起来它简化为 getKeyFrameIndex
,它将状态时间除以frameDuration(构造函数的一个参数,表示每个帧的持续时间)来计算数组索引。对于循环或非循环序列,getKeyFrameIndex
会执行不同的操作,但基本上它会采用数组索引从序列中查找正确的关键帧来显示。
因此,“stateTime”是从您的动画中选择关键帧的输入。文档假定您有一个“running”和另一个“jumping”的Animation
实例(这些是其所提到的“状态”)。要在Animation
中找到正确的关键帧,您告诉它您已经处于此“状态”多长时间。因此,如果您已经在“running” Animation
实例中停留了1.2秒,它会执行一些数学计算以确定要显示哪个关键帧(假设您已使用30帧初始化实例,每帧持续0.0333秒并循环——它选择第6帧)。
维基https://github.com/libgdx/libgdx/wiki/2D-Animation上有更多细节和示例,但也没有直接涉及这个问题。
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);
}
}