【发布时间】:2013-04-17 12:08:40
【问题描述】:
在 LibGDX 中是否有一个演员是动画的(接受一个动画)并且当添加到舞台时会自行动画,还是您必须在其中实现自己的 Image 类并自己为其制作动画?
【问题讨论】:
在 LibGDX 中是否有一个演员是动画的(接受一个动画)并且当添加到舞台时会自行动画,还是您必须在其中实现自己的 Image 类并自己为其制作动画?
【问题讨论】:
我只是创建了一个“AnimatedImage”演员类,它只接受一个动画作为参数(不需要自定义的 Drawable 类)。我认为这个解决方案比上面的解决方案要简单得多。
AnimatedImage.java:
public class AnimatedImage extends Image
{
protected Animation animation = null;
private float stateTime = 0;
public AnimatedImage(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);
}
}
【讨论】:
和你一样,我没有找到动画 Actor,所以我自己创建了:
AnimatedActor.java:
public class AnimatedActor extends Image
{
private final AnimationDrawable drawable;
public AnimatedActor(AnimationDrawable drawable)
{
super(drawable);
this.drawable = drawable;
}
@Override
public void act(float delta)
{
drawable.act(delta);
super.act(delta);
}
}
AnimationDrawable.java:
class AnimationDrawable extends BaseDrawable
{
public final Animation anim;
private float stateTime = 0;
public AnimationDrawable(Animation anim)
{
this.anim = anim;
setMinWidth(anim.getKeyFrameAt(0).getRegionWidth());
setMinHeight(anim.getKeyFrameAt(0).getRegionHeight());
}
public void act(float delta)
{
stateTime += delta;
}
public void reset()
{
stateTime = 0;
}
@Override
public void draw(SpriteBatch batch, float x, float y, float width, float height)
{
batch.draw(anim.getKeyFrame(stateTime), x, y, width, height);
}
}
【讨论】:
Image 并不是很有用。您可以扩展Actor 并在其中存储Animation。 Image 希望拥有Drawables,恕我直言,它不像TextureRegions 和其他人那样舒服,您不需要自己制作可绘制的。您还将数据存储两次,分别在Image 和AnimatedActor