我不明白为什么我的代码会产生如下所示的内容。我希望窗口在窗口中对齐。窗口大小在主类中设置:
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);
}
}
}
}
}
答案 0 :(得分:0)
在drawLevel
的嵌套for循环中,使用变量y
索引切片贴图的x坐标,使用x
索引y坐标。定义L
和U
时会出现问题,因为您正在使用磁贴的错误维度。因为在你的循环中x
是一个沿着高度的度量,你必须写int U = x*tileHeight;
和int L = y*tileWidth
。
我在以下代码中交换了两个for循环,因此x
和y
具有相同的含义。
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);
}
}
}
我希望这能解决你的问题。