名前を保持し、次を使用して適切なグラフィックを表示する配列があります。
public void paintComponent(Graphics g){
for(int i = 0; i<20; i++)
{
for(int j = 0; j<20; j++)
{
if(testMap.getData(i+(rowX-7), j+(columnY-7)).indexOf("rock") >= 0)
{
g.drawImage(image3, j*50 + 5*add, i*50 + 5*add2, 50, 50, this);
}
}
}
これは、私のゲームの実際のグラフィックスをうまく表示します。ただし、私のミニマップでは、for ループの 'i' と 'j' で異なる値と増加した数値を使用して、同じことを行います。これにより、より大きな範囲でマップのより小さなバージョンが作成され、これが残ります。(注: drawImage() メソッドの 1 つだけを含めました。コードを読みやすくするために、ここでは残りを削除しました):
これは私が望んでいた効果とほぼ同じですが (簡単に変更できる配置は別として)、これは既に画面に表示されているものを小さくしたものにすぎません。ただし、約 20 x20 を超えると、ゲームが大幅に遅れ始めます。おそらく、コードのひどい方法と関係があります。
fillRect を使用して画像を正方形に置き換えてみましたが、問題は解決しません。
誰かが見たい場合は、これが私のメインクラスのコードです: http://pastebin.com/eEQWs2DS
paintComponent メソッド内の for ループは 3160 行目あたりから始まり、メイン ディスプレイのループは 2678 行目あたりから始まります。Jframe を 1260 行目あたりに設定しました。
以上のことから、基本的に私の質問は次のとおりです。
ミニマップを作成するためのより効率的な方法はありますか? 私の考えは、フレームが更新されるたびにゲームが再計算する必要がないように、プログラムの開始時に画像を生成することでした。事前にマップを作成することもできますが、マップを変更するたびに手動で更新する必要があり、これは非常に面倒です。前者の方法を調べるのに苦労しています。私の他のアイデアは、ミニマップのみのリフレッシュ レートを遅くすることですが、その方法もわかりません。
それ以外に、ラグの問題に対する簡単な修正があれば教えてください。非常に厄介なコードで申し訳ありません - ディスプレイを使って何かをプログラミングするのはこれが初めてなので、うまくいくまでハッキングしました。