11

LibGDX には、アニメーション化される (アニメーションを取る) アクターがあり、ステージに追加されるとそれ自体がアニメーション化されますか、それとも独自の Image クラスを実装して自分でアニメーション化する必要がありますか?

4

2 に答える 2

21

アニメーションのみを引数として取る「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);
    }
}
于 2014-04-27T13:57:28.663 に答える
13

あなたと同じように、アニメーション化された俳優が見つからなかったので、自分で作成しました:

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);
    }
}
于 2013-04-17T19:47:42.080 に答える