4

だから私はJavaが初めてだと思っていましたが、それを回避する方法は知っていますが、2Dタイルゲームを作りたいと思っていました. 2D Array を使用してマップを作成できると聞きました。しかし、マップを JFrame の画面に画像として表示するにはどうすればよいでしょうか。したがって、配列/マップの例は次のとおりです。

1111111111
1011011001
1001100011
0000100011
0000000000
2222222222

0 = blueSky.png
1 = cloud.png
2 = grass.png

ありがとう! 編集2 だから私は今これを持っています:

import javax.swing.*;
import java.awt.*;

public class Game extends JFrame {

private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
        ImageIcon sky = new ImageIcon ("/Users/pro/Desktop/sky.png");

        JPanel grid = new JPanel();
        grid.setLayout(new GridLayout(25, 25));
        for (int i = 0; i < 25; i++) {
            for (int n = 0; n < 25; n++) {
                grid.add(new JLabel(sky));
            }
        }
        JFrame frame = new JFrame("Map");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //frame.setPreferredSize(new Dimension(640, 400));
        frame.add(grid);
        frame.pack();
        frame.setVisible(true);
    }
}

これは空の画像でいくつかのタイルを印刷しますが、一番下の行を別の画像にするにはどうすればよいですか?

4

2 に答える 2

5

2D 配列を非 GUI モデルと見なします。データ自体は、おそらくテキスト ファイルなどのデータ ファイルに保持される可能性が高く、データを読み取り、おそらくint、おそらくカスタムCellクラス(繰り返しますが、すべて非GUIです)。次に、GUI はモデルを解釈し、論理的な方法でデータを表示する必要があります。これは、おそらく、GridLayout を使用する JPAnel によって保持される JLabel の 2D グリッドを作成し、次に ImageIcons を使用して画像を保持し、モデルの状態に基づいて各 JLabel のアイコンを設定することによって実行できます。

編集1
したがって、使用される可能性のあるクラスは次のとおりです。

  • TileType: タイルの概念をデータ ファイルが保持する数値に関連付ける列挙型
  • TileCell: 非 GUI クラスで、TileType フィールドを保持します。また、セルで見つけることができるアイテムのリストを保持することもあります (ゲームでこれが必要な場合)。その隣人についての情報を持っているかもしれません。
  • TileCellGrid: TileCells の 2D グリッドを保持する非 GUI クラス。
  • GridDataIO: グリッド データをファイルに読み書きするためのユーティリティ クラス。
  • GameGrid: JPanel を使用して GridLayout を保持する GUI クラス。JPanel は、OP にリストする画像を表示する ImageIcons を持つ JLabels を保持します。


あなたの質問に関して2を編集してください:

everyLabel に適切な画像を設定するにはどうすればよいですか?

オブザーバー/オブザーバブル パターンを使用し、モデルにリスナーを追加します。したがって、モデルが変更されるたびに、GUI またはビューに通知する必要があります。次に、ビューはデータ配列を要求し、それを反復して、配列をループするときに変更が必要な画像アイコンを変更します。

于 2011-07-29T18:26:34.700 に答える
4

JLabelアイコンで を使用し、 を使用してレイアウトすることをお勧めしますGridLayout

サンプルコードとスクリーンショットを含む関連する質問/回答:

于 2011-07-29T18:24:36.450 に答える