1

簡単なゲームで Java を学習するという私の探求を続けていると、ちょっとした問題に遭遇しました。私のゲームボードは JPanel とボードの各部分を拡張します。さて、これにはいくつかの問題があります。

  1. 各ピースのサイズを設定できないため、各ピース JPanel は JFrame 全体を占有し、残りのピースと背景 (ゲームボード) を隠します。

  2. ピースの位置を設定できません。

デフォルトのフローマネージャーがあります。セットバウンドを試みましたが、運がありませんでした。

おそらく、他の JComponent を拡張するためのピースを作成する必要がありますか? 追加画像: それがピースです。灰色の領域もピースです。mousePressed リスナーを作成し、それにいくつかのものを割り当てることでそれを確認しました。灰色の領域の下には、別の JPanel であるゲームボードがあります (または、少なくともそうあるべきです!)。

代替テキスト http://img42.imageshack.us/img42/2227/screenshotvdy.png

いくつかのコード:

package TheProject;

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class GameWindow extends JFrame {
public GameWindow() {
    setSize(800, 600);
    setLocationRelativeTo(null);
    Map map = new Map(800, 600, 2);
    add(map);

    MilitaryUnit imperialRussia = new MilitaryUnit(30, Color.BLACK, Color.YELLOW, Color.WHITE);
    imperialRussia.setPreferredSize(new Dimension(30, 30));
    add(imperialRussia);

}
 }

これは、pack() メソッドを適用すると発生します: alt テキスト http://img442.imageshack.us/img442/5813/screenshot2ml.png

より大きく、JFrame を埋めるマップではなく、ユニットの周りにパックします。

4

4 に答える 4

1

ピースがランダムに動くゲームでは、おそらく「ヌル レイアウト」を使用します。

詳細については、絶対配置に関する Swing チュートリアルのセクションを参照してください。

于 2010-04-13T01:32:57.530 に答える
0

試しましたsetPreferredSize(Dimension d)か?

編集: コンポーネントを追加した後、JFrame を呼び出す必要がありpack()ます。

JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(800,600));
JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(200,200));
frame.add(panel);
frame.pack();
frame.setvisible(true);

また、JFrame と同じサイズの Map を JFrame に追加します。しかしその後、別のコンポーネントをデフォルトのフローレイアウトに追加します。マップが既にスペースの 100% を占有しているため、これはフレームに収まりません。

于 2010-04-13T01:19:36.100 に答える
0

NetBeans のビジュアルエディタを試しましたか? これを使用して、デザイン ビューで Swing オブジェクトをドラッグ、ドロップ、およびサイズ変更して、コード ビューに切り替えて、生成されたコードを表示できます。そのように学ぶことができます。

于 2010-04-13T01:26:27.283 に答える
0

を使っていくつかのゲームを書きましたJPanel。基本的に、私が使用するJPanel方法は、メソッドCanvasをオーバーライドすることで直接描画しますpaint()。を使用する理由JPanelは、ゲーム ワールドのサイズを決定し、 を使用しsetPreferredSize()てパネルのサイズを設定できるからです。次に、パネルを に追加しJScrollPaneます。したがって、これはパンなどを処理します。

2D ゲームを書いているとします。これがJPanelの使い方です。ゲーム マップを保持する論理マップ (2D 配列) があります。各位置が 32x32 ピクセルであるとします。それで、地面とその場所の地面にあるものを描き始めます。たとえば、x=1、y=2 の画面位置 x=32、y=64 では、最初に地面を描き、次に地面にあるものを描きます。したがって、レンダリング ループの大まかな概要は次のようになります。

for (int y = 0; y < map.length; y++)
   for (int x = 0; x < map[y].length; x++) {
      drawGround(map[y][x])
      for very element on on map[y][x] - render them
}      

JPanel にリスナーを設定するMouseListenerと、マウスをクリックするたびにマップに変換されます。マウス クリック x=54、y=72 は x=1、y=2 に対応します。等角図の場合、計算は少し複雑です。

ここで注意しなければならないのは、スクロール パネルを介してパネルをスクロールするたびに、paint()が呼び出されることです。したがって、ゲーム ボードを でレンダリングしてからBufferedImagepaint()メソッドで を描画するのBufferedImageが適切です。そうしないと、速度が遅すぎます。

于 2010-04-13T01:34:49.897 に答える