私は1.4.2 JREとの互換性を提供する必要があることに気付くまで、最新バージョンのJava、Java 6を使用して、Eclipseでの学校の割り当てのための戦艦ゲームに取り組んできました。イメージをJPanelの後方互換性の問題にレンダリングする - 何が間違っているのですか?
1.4.2コンパイラでは使用できない機能やライブラリクラスは使用しないように注意しています。コードが正常にコンパイルされます。問題は、ゲームの背景イメージが適切にレンダリングされていないことです。左上の小さな角だけがレンダリングされています。
ゲームは、Java 6ランタイム環境の下で適切にレンダリング
Image Link (I can't embed them yet.)
1.4.2 JRE
の下でレンダリングされているだけのコーナー:参考は、ここに私の問題を示すスクリーンショットです
Image Link (I can't embed them yet.)
そしてもちろん、 2つのスクリーンショットのコードで、異なる実行時環境。
背景が表示されているJPanelに描画され、setContentPane()
を使用してJFrameに追加されます。イメージをプログラムにロードする際にエラーはありません。
私は多くのテストを行い、入力ハンドラがその小さなコーナー内に画像を持つ入力にしか応答しないことに気付きました。これは、JPanelが画面全体を満たしていないことを意味します。そのサイズをダブルチェックし、JFrameのサイズ(800 x 600)と一致します。この方法は、ゲームのフレームをレンダリングするために繰り返し呼び出され
public void render() {
Graphics2D g = (Graphics2D) getGraphics();
Graphics2D gb = (Graphics2D) buffer.getGraphics();
gb.drawImage(background, 0, 0, null);
gb.setColor(new Color(45, 45, 45));
gb.setFont(new Font("Arial", Font.BOLD, 18));
gb.drawString("Outwit the computer. Are you up for the challenge?", 175, 185);
cont.draw(gb, contState);
//Draw buffer to screen
g.drawImage(buffer, 0, 0, null);
}
:
そして、ここでは私のレンダリングコードです。これはJPanelクラスの一部です。
私はほとんどすべてを試しましたが、これが私の最後の手段です。これはおそらく古いランタイム環境のバグでしょうか?どんな洞察力も大いにありがとう!
ありがとうございます。私はあなたが汚れた地域を見て、どこで再描画するためのプログラムを伝えるのではなく、それは何が起こっているかを知っていると仮定する必要があると思うhttp://java.sun.com/products/jfc/tsc/articles/painting/#mgr
::)
あなたが絵を描く方法の完全な文脈なしであなたが何をしているかを伝えるのは難しいです。たとえば、カスタムペイントは、メソッドに渡されたGraphicsオブジェクトを使用して、JPanelのpaintComponent()メソッドで実行する必要があります。 BufferedImageのGraphicsオブジェクトを取得してからバッファリングされたイメージにペイントしない限り、getGraphics()メソッドを使用してGraphicsオブジェクトを取得しないでください。問題を示す[SSCCE](http://www.sscce.org)を投稿する必要があります。私はJDK1.4.2を使用していませんが、多分私は他のペイントの問題に気づくことができます。 – camickr
私はちょうどpaintComponent()を試しましたが、まだ違いはありません、小さなコーナーはまだ再塗装されています...また、getGraphics()に関する情報のおかげで、私はコード。 :) 私はSSCCEを投稿する作業をします。 – Geoff
@Geoff:あなたは "試してみた"が、あなたが何をしたのか、なぜ新しいコードがうまくいかないのかはわかりません。私は第2回Camickrの勧告:あなたがしていることを見てテストするために[sscce](http://sscce.org)を作成して提供します。 –