我正在研究Java中的ASCII图形引擎,以模拟终端图形,而不会遇到处理实际终端的麻烦。
一个关键因素是为人物的背景着色。因此,在每个位置,我都放置一个矩形(用作背景颜色)和一个Text对象,它表示一个字符(使用等宽字体)。
我尝试过使用FlowPanes,TilePanes,GridPanes,但是常规Panes看起来效果最好(实现的间距最小)。这是一张显示手头问题的图片:Screenshot
我正在尝试使所有矩形对齐,使得没有可见空间可以透视背景。在上面链接的图像中,彩色矩形之间应该没有黑色的脊。
这是我为每个“像素”添加Rectangle和Text的代码(它只是一个名为Char的类,它包含一个Rectangle和一个Text对象)。
for (int x = 0; x < COLUMNS; x++)
for (int y = 0; y < ROWS; y++)
pixels[x][y] = new Char(pane, paddingX + x * width, paddingY + y * height, width, height);
在此块之前计算高度和宽度,并根据使用的字体确定。它们代表任何字符的宽度和高度,因为使用的字体是等宽字体。填充只是用于居中“像素”的数字,也是在嵌套循环之前确定的。
Char class:
private Text ch;
private Rectangle background;
Char(Pane pane, double x, double y, double w, double h) {
ch = new Text();
ch.relocate(x, y);
ch.setFont(View.font);
ch.setFill(Color.WHITE);
background = new Rectangle(w, h, Color.BLACK);
background.relocate(x, y);
ch.setBoundsType(TextBoundsType.VISUAL);
pane.getChildren().addAll(background, ch);
}
答案 0 :(得分:1)
这是一个四舍五入的问题。可以通过确保使用整体位置和大小来修复它。
在以下代码中,您将x
,y
,nx
和ny
的分配替换为评论结果中的分配可见间隙,但更改{{1 }和w
到整数值,例如h
,也可以防止出现明显的差距:
10