我如何循环不同的图像,Java

时间:2015-10-09 13:10:55

标签: java animation textures

我的代码用于通过g.draw(img);在屏幕上绘制图像。有没有办法让图像循环通过不同的图像而不是静态?我已经尝试过.gif文件,但他们不会工作。这是我的代码:

static BufferedImage img = null;
{
    try {
        img = ImageIO.read(new File("assets/textures/bird.png"));
    } catch (IOException e) {
        System.out.println(e.getMessage();
    }
}

有没有办法为纹理设置动画?

1 个答案:

答案 0 :(得分:0)

您可以创建一个小类来为您执行此操作:

public class SimpleImageLoop {

    private final BufferedImage[] frames;
    private int currentFrame;

    public SimpleImageLoop(BufferedImage[] frames) {
        this.frames = frames;
        this.currentFrame = 0;
    }

    /**
     * Moves the loop to the next frame.
     * If we are on the last frame, this loops back to the first
    */
    public void nextFrame() {
        this.currentFrame++;
        if (this.currentFrame >= frames.length) {
            this.currentFrame = 0;
        }
    }

    /**
     * Draws the current frame on the provided graphics context
    */
    public void draw(Graphics g) {
        g.draw(this.frames[this.currentFrame];
    }
}

然后你需要一个简单的动画循环来调用update()draw()

final SimpleImageLoop imageLoop = new SimpleImageLoop(frames);
while (true) {
    imageLoop.nextFrame();
    imageLoop.draw(g);
}

如果需要平滑结果,可以包含其他参数,例如应执行的循环次数,帧的持续时间等。