来自数组定位的基于 Java 瓦片的地图



我不明白为什么我的代码会产生如下所示的内容。我希望磁贴在窗口中对齐。窗口大小在主类中设置:

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/

在嵌套的

for 循环中drawLevel使用变量 y 为切片地图的 x 坐标编制索引,并使用变量 x 为 y 坐标编制索引。当您定义LU时,会出现此问题,因为您乘以瓷砖的错误维度。因为在你的循环x内部是一个沿着高度的度量,你必须写int U = x*tileHeight;int L = y*tileWidth.

我在下面的代码中将两者换成了循环,因此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);
        }
    }
}

我希望这能解决你的问题。

最新更新