我的代码用于通过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();
}
}
有没有办法为纹理设置动画?
答案 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);
}
如果需要平滑结果,可以包含其他参数,例如应执行的循环次数,帧的持续时间等。