所以我在做一個遊戲,你可以把炸彈在你的角色的位置。當炸彈被顯示時,每個炸彈都與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