Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX是否有动画演员?_Java_Libgdx - Fatal编程技术网

Java LibGDX是否有动画演员?

Java LibGDX是否有动画演员?,java,libgdx,Java,Libgdx,在LibGDX中,是否有一个演员是动画演员(拍摄动画),当添加到舞台上时,会自动制作动画,还是必须在中实现自己的图像类并自己制作动画?就像你一样,我没有找到动画演员,所以我自己创建了: AnimatedActor.java: public class AnimatedActor extends Image { private final AnimationDrawable drawable; public AnimatedActor(AnimationDrawable draw

在LibGDX中,是否有一个演员是动画演员(拍摄动画),当添加到舞台上时,会自动制作动画,还是必须在中实现自己的图像类并自己制作动画?

就像你一样,我没有找到动画演员,所以我自己创建了:

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);
    }
}
我只是创建了一个“AnimatedImage”actor类,它只将动画作为参数(不需要自定义可绘制类)。我认为这个解决方案比上面的简单得多

animateImage.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);
    }
}

我也做了类似的事情。我会等待,看看是否有人能指出一个实际的演员类,但如果没有,我会将此标记为答案。非常感谢您的片段,善良的先生。这似乎比“直接”方法慢一点:TextureRegion frame2=bird_07.getKeyFrame(stateTime,true);stage.getSpriteBatch().begin();stage.getSpriteBatch().draw(currentFrame,1000700);知道为什么吗?我认为在这种情况下扩展
Image
不是很有用。您可以扩展
Actor
并在其中存储
动画。图像希望有
可绘制的
s,而这并不像
纹理区域
s和其他区域那样舒适,并且您不需要制作自己的可绘制图像。您还可以将数据存储两次,分别存储在
Image
AnimatedActor
@Mr.Developer中。Libgdx理论上是跨平台的,但我没有在iOS上测试它。