所以我正在制作一个游戏,你可以在你的角色所在的位置放置炸弹。当炸弹显示并最终爆炸时,每个炸弹都与一个 GIF 图像相关联(想想炸弹人)。
问题是,当我试图在屏幕上绘制多个炸弹时,它是从 GIF 的最后一帧开始绘制的。经过调查,我找到了重置 GIF cicle 的方法 image.flush() 但现在的问题是,每次我在屏幕上绘制第二个炸弹时,屏幕上所有以前的炸弹都会重置 GIF 周期。
这是每个炸弹的构造函数:
public Tnt(int x, int y){
this.x = x;
this.y = y;
ImageIcon ii = new ImageIcon("src/main/resources/modelObjects/tnt.gif");
image = ii.getImage();
image.flush();
}
我创建的每个炸弹都进入一个 ArrayList (listTnt) 并在 6 秒后被删除,所以我只绘制已经激活的炸弹。
这是我的绘图方法:
public void draw(Graphics2D g2d, JPanel board){
for(Tnt tnt: listTnt){
g2d.drawImage(tnt.getImage(), tnt.getX(), tnt.getY(), board);
}
}
编辑:似乎问题出在 ImageIcon 上,因为它使用 Toolkit.getImage 重用了图像。相反, Toolkit.createImage 创建一个不可重用的图像。
这是我的 Tnt 新构造函数,效果很好:
public Tnt(int x, int y){
this.x = x;
this.y = y;
Toolkit t = Toolkit.getDefaultToolkit ();
image = t.createImage("src/main/resources/modelObjects/tnt.gif");
}
我image.flush()
现在什至不需要。谢谢你们。