だから私はあなたがあなたのキャラクターの場所に爆弾を置くことができるゲームを作っています。各爆弾は、爆弾が表示されたときにGIF画像に関連付けられ、最終的にBOOMになります(ボンバーマンについて考えてみてください)。
問題は、画面に複数の爆弾をペイントしようとすると、GIFの最後のフレームからペイントされたということでした。調べてみると、gif cicleをリセットするメソッドimage.flush()が見つかりましたが、問題は、画面に2つ目の爆弾をペイントするたびに、画面上の以前のすべての爆弾の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);
}
}
編集:Toolkit.getImageを使用して画像を再利用するため、問題はImageIconにあるようです。代わりに、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()
。皆さん、ありがとうございました。