-2

現在、書いているゲーム内のクリップを管理するパネルを作ろうとしています。プレーヤーがマウスをクリックすると、画面の右側に表示されるクリップが強調表示されます。プレーヤーがキーボードの H を押すと、画面上にプレーヤーのヘルプ ブレットがいくつか表示されます。これらのヘルプ文字列を描くときは、大きな灰色の四角形を描き、その上に黒いテキストを描きます。クリアしようとすると (画像をリセットして、ソース ファイルから空白の画像に描画されます)、ヘルプ画面が消去されるのではなく、すべての新しいものがヘルプ画面の上に描画されます。

public void refresh(){
        overImg = World.imageBank.getImage("blank", -1).getSubimage(0, 0, 400, 400);
    drawInfo();
        drawClips();
        drawLayers();
        repaint();
    }

imageBank はその名の通り、ワールドの初期化時に描画される画像のバンクです。getImage("blank", -1) は、私が作成した 1200, 1200 のイメージを返します。このイメージには空のアルファ チャネルがあり、それの小さいバージョンを使用します。この更新メソッドは、何かが押されるたびに呼び出されますが、画像がリセットされない理由がわかりません。私の問題である可能性がある、提供すべきコードが他にある場合は、お知らせください。

4

1 に答える 1

1

この同じ問題に遭遇した他の人のために、私の友人が解決策を教えてくれました. イメージ バンクからイメージを取得すると、新しいイメージは作成されず (これは明らかなはずです)、元のサブイメージ部分への参照を与えるだけです。つまり、バッファリングされた空白に描画していたことを意味します。イメージバンクに保存された画像。これを防ぐためにすべきことは、イメージのディープ コピーを作成することです。これは、(多かれ少なかれ) このように行う必要があります。

public static BufferedImage deepCopyImage(BufferedImage bF){
        ColorModel cm = bF.getColorModel();
        boolean alphaPre = bF.isAlphaPremultiplied();
        WritableRaster wR = bF.copyData(null);
        return new BufferedImage(cm, wR, alphaPre, null);
    }
于 2013-05-03T13:39:13.147 に答える