Java图形-绘制线条
我在Java程序中绘制线条时遇到一些问题 我想玩一些迷宫生成算法,但目前正在努力建立一个董事会,以可视化的过程和创造的迷宫。以下是我当前的设置: 我生成了一个50 x 25的网格(2D数组),每个块宽20像素,高20像素,现在我要为每个网格将四面墙都画成线 我通过将for循环值(用于遍历数组)乘以块大小来获得每个块的起始x和y坐标。例如,如果我当前正在查看网格[2][3],那么像素坐标将为(40,60)。我的问题是,没有绘制南墙和东墙,在我的程序中没有显示任何内容,即使正在生成坐标,但是正在绘制我的北墙和西墙 如果我想画南墙,我试图通过如下调整位置来获得墙坐标,块的起始x和y坐标是(40,60)。那么应该用来绘制南墙的两点应该是,(40,80)和(60,80) 下面是我当前使用的渲染方法:Java图形-绘制线条,java,graphics,drawing,line,coordinates,Java,Graphics,Drawing,Line,Coordinates,我在Java程序中绘制线条时遇到一些问题 我想玩一些迷宫生成算法,但目前正在努力建立一个董事会,以可视化的过程和创造的迷宫。以下是我当前的设置: 我生成了一个50 x 25的网格(2D数组),每个块宽20像素,高20像素,现在我要为每个网格将四面墙都画成线 我通过将for循环值(用于遍历数组)乘以块大小来获得每个块的起始x和y坐标。例如,如果我当前正在查看网格[2][3],那么像素坐标将为(40,60)。我的问题是,没有绘制南墙和东墙,在我的程序中没有显示任何内容,即使正在生成坐标,但是正在绘制
private void renderBoard(Graphics g) {
for (int i = 0; i < x; i++) {
for (int j = 0; j < y; j++) {
Node node = grid[i][j];
// Draw the Node's Background
g.setColor(Color.BLACK);
g.fillRect(i * blockSize, j * blockSize, blockSize, blockSize);
// Draw the Node's North Wall
if (node.walls.contains(Walls.NORTH)) {
Line line = new Line(i, j, Walls.NORTH, blockSize);
// System.out.println("Point1 (X1: " + line.x1 + " Y1: " + line.y1 + ") Point2 (X2: " + line.x2 + " Y2: " + line.y2 + ")");
g.setColor(Color.WHITE);
g.drawLine(line.x1, line.y1, line.x2, line.y2);
}
// Draw the Node's South Wall
if (node.walls.contains(Walls.SOUTH)) {
Line line = new Line(i, j, Walls.SOUTH, blockSize);
g.setColor(Color.WHITE);
g.drawLine(line.x1, line.y1, line.x2, line.y2);
}
}
}
}
我暗自怀疑我正在做一些非常愚蠢的事情,或者遗漏了一些非常小的事情,如果能得到任何帮助,我将不胜感激。在
renderBoard(Graphics g g)
中,x
和y
的值是什么?这些是数组的维度,x=50,y=25。在构建行时:新行(i,j,Walls.NORTH,blockSize);
是否应该将i
和j
作为参数传递,或者i*blockSize
和j*blockSize
作为参数传递?请注意,在行中,与其他if
(s)语句相比,开关将看起来整洁得多.enum
与switch
语句兼容。@copeg我在Line类构造函数中处理乘法,@Bruce Wayne我将把它切换为switch-Case语句,我同意你的说法,它看起来会更整洁
class Line {
// Current X Y Coordinates in the Grid
private int x;
private int y;
// The Lines Start and End Coordinates
public int x1, x2;
public int y1, y2;
public Line(int x, int y, Walls wall, int blocksize) {
// Here we get the pixel coordinate based off of the current Array Position
this.x = (x * blocksize);
this.y = (y * blocksize);
switch(wall) {
case NORTH:
x1 = this.x;
y1 = this.y;
x2 = this.x + blocksize;
y2 = this.y;
break;
case SOUTH:
x1 = this.x;
y1 = this.y + blocksize;
x2 = this.x + blocksize;
y2 = this.y + blocksize;
break;
case EAST:
x1 = this.x + blocksize;
y1 = this.y;
x2 = this.x + blocksize;
y2 = this.y + blocksize;
break;
case WEST:
x1 = this.x;
y1 = this.y;
x2 = this.x;
y2 = this.y + blocksize;
break;
}
}
}