所以我在做一个游戏,你可以把炸弹在你的角色的位置。当炸弹被显示时,每个炸弹都与GIF图像相关联,并最终进入BOOM(想想炸弹人)。多个实例
的问题是,当我试图在屏幕上绘制一个以上的炸弹,它是从GIF的最后一帧画。在调查中,我找到了image.flush()方法来重置GIF Cicle,但现在问题是每当我在屏幕上绘制第二个炸弹时,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()
现在。谢谢你们。
'image'的范围是什么? – trashgod 2012-07-31 17:36:42
在应用程序的主要游戏状态中,我有一个炸弹列表。当我在游戏中放置炸弹时,会创建一个新的Tnt并添加到列表中,并在6秒(炸弹生命周期)后将炸弹从列表中移除。 'draw'方法只从list和'image'中绘制炸弹是Tnt内的一个变量。 – 2012-07-31 18:00:04
请参阅[在Swing中显示动画BG](http://stackoverflow.com/questions/10836832/show-an-animated-bg-in-swing)。 – 2012-07-31 23:07:02