【发布时间】:2014-07-06 14:54:10
【问题描述】:
如何在 LibGDX 中使用已实现的动画?我知道,可以在here 找到文档,但是当我想从动画中获取帧时,我需要使用 stateTime,文档中的任何地方都没有解释。那么问题来了,就 LibGDX 的 Animation 而言 stateTime 是什么?
【问题讨论】:
如何在 LibGDX 中使用已实现的动画?我知道,可以在here 找到文档,但是当我想从动画中获取帧时,我需要使用 stateTime,文档中的任何地方都没有解释。那么问题来了,就 LibGDX 的 Animation 而言 stateTime 是什么?
【问题讨论】:
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 有更多细节和示例,但也没有直接解决这个问题。
【讨论】:
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);
}
}
【讨论】: