0

コードが以下に示すものを生成している理由がわかりません。タイルをウィンドウに配置したいのです。ウィンドウサイズはメインクラスで設定されます。

this.getContentPane().setPreferredSize(new Dimension(WINDOW_X, WINDOW_Y));

これは私の地図のクラスです。

public class Map1 {

int mapx = 19;
int mapy = 19;

int tileWidth = 600 / (mapx + 1);
int tileHeight = 500 / (mapy + 1);

int[][] map =      {{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
                    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}};

public void drawLevel(Graphics g){
    g.setColor(Color.GREEN);

    for (int x = 0; x <= mapx; x++){

        for (int y = 0; y <= mapy; y++){

            int L = x * tileWidth;
            int U = y * tileHeight;
            int R =  tileWidth;
            int D =  tileHeight;

            if (map[y][x] == 1){
                //g.fillRect((x * tileWidth), (y * tileHeight), (x + tileWidth), (y + tileHeight));
                g.fillRect(L, U, R, D);
            }

            }

        }

    }

}

http://www.flickr.com/photos/88246499@N05/8067438151/

4

1 に答える 1

0

ネストされたforループでdrawLevelは、変数yを使用してタイルマップのx座標にxインデックスを付け、y座標にインデックスを付けます。問題は、定義するときに、タイルの間違った寸法で乗算しているためLに発生します。Uあなたのループの内側xはあなたが書かなければならない高さに沿った尺度であるからint U = x*tileHeight;ですint L = y*tileWidth

次のコードでは、2つのforループを入れ替えたのでxy共通の意味があります。

for (int y = 0; y <= mapy; y++){
    for (int x = 0; x <= mapx; x++){
        int L = x * tileWidth;
        int U = y * tileHeight;
        int R =  tileWidth;
        int D =  tileHeight;
        if (map[x][y] == 1){
            g.fillRect(L, U, R, D);
        }
    }

}

これで問題が解決することを願っています。

于 2012-10-08T16:48:06.357 に答える