删除矩形JavaFX之间的间距

时间:2018-05-30 06:31:19

标签: java javafx game-engine rectangles pane

我正在研究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);
}

1 个答案:

答案 0 :(得分:1)

这是一个四舍五入的问题。可以通过确保使用整体位置和大小来修复它。

在以下代码中,您将xynxny的分配替换为评论结果中的分配可见间隙,但更改{{1 }和w到整数值,例如h,也可以防止出现明显的差距:

10