LibGDX有一个动画的演员吗?

Lok*_*are 11 java libgdx

在LibGDX中是否存在动画的动画(采用动画),当添加到舞台动画时,或者您是否必须自己实现自己的Image类并为其设置动画?

pot*_*mmy 19

我只是创建了一个"AnimatedImage"actor类,它只将一个Animation作为参数(不需要自定义的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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Ali*_*aaa 12

就像你我没有找到动画演员所以我创造了自己:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为在这种情况下扩展`Image`并不是很有用.你可以扩展`Actor`并在其中存储一个`Animation`.Image希望拥有`Drawable`s,其中IMHO不像`TextureRegion`s和其他人那样舒服,而且你不需要制作自己的drawable.您还可以在"Image"和"AnimatedActor"中存储两次数据 (4认同)