2

編集:awtを使用...

アプレット ベースの数学ゲームで乱数を表示しようとしていますが、問題が発生しました。メソッドを呼び出す場所に応じて、次の 2 つのいずれかが発生します。

  • 数値は、各フレームを自動的に更新せずに適切に生成および表示されますが、実行時に更新されるときに背景とアートワークによって各フレームに描画されます。または...
  • 画面に表示される数字は背景要素の上に表示されますが、フレームごとに新しく再描画されます。

簡単な説明:

private int setNumberOne() {

    return rand.nextInt(11) + 2;
}

private int setNumberTwo() {

    return rand.nextInt(11) + 2;
}

private int setAnswer() {

    return setNumberTwo() * setNumberOne();
}

private void displayOutput() {

    Graphics2D g2d = graphics();

    int one = setNumberOne();
    int ans = setAnswer();

    setNumberTwo();

    g2d.setColor(Color.WHITE);
    g2d.drawString(one + " x ? = " + ans, 480, 480);
}

初期化メソッドでこの関数を呼び出すと、特定のトリガーが満たされたときに他の場所で更新できる静的な質問が表示されますが、それ以外は更新イベントによってその上に描画され、非表示になります。これが機能していることを確認できた唯一の方法は、テストのためにゲームから他の画像を削除することです。

アプレットで GUI 要素の「優先順位」を設定する方法はありますか?

私は現在、displayOutput()独自のスレッドにメソッドを含めようとしていますが、Java の経験が少なく、解決が非常に難しいことが証明されています。

また、実行時に背景が更新されないようにしましたが、その結果、移動するゲーム オブジェクトの軌跡が画面全体に残りました。

私は何が欠けていますか?これを正しく実装する方法について何か提案があれば、喜んでお聞きします。

更新: "... AWT の場合は [...] コンポーネントの paint(...) メソッドを描画し、JVM から渡された Graphics オブジェクトを使用します" -

解決しました、ありがとうございます!

4

1 に答える 1

5

グラフィック コンポーネントには使用しないgetGraphics()でください。これは、次の再描画で上書きされる非永続オブジェクトを返すためです。代わりに、これが Swing アプリの場合は JComponent のpaintComponent(...)メソッド (あなたは言いません) を描画しpaint(...)、AWT の場合はコンポーネントのメソッドを描画し、JVM によって渡された Graphics オブジェクトを使用します。これはよく説明されているので、Javaで描画する方法に関するチュートリアルをよく読んでください。

于 2012-12-01T13:19:16.807 に答える