gpt4 book ai didi

java - 删除矩形之间的间距 JavaFX

转载 作者:行者123 更新时间:2023-12-02 11:11:26 26 4
gpt4 key购买 nike

我正在使用 Java 开发 ASCII 图形引擎,以模拟终端图形,而无需处理实际终端的一些麻烦。

一个关键元素是为字符的背景着色。因此,在每个位置,我放置一个用作背景颜色的矩形和一个代表字符的 Text 对象(使用等宽字体)。

我尝试过使用 FlowPanes、TilePanes、GridPanes,但常规 Pane 似乎效果最好(实现最小间距)。这是显示当前问题的图像:Screenshot

我试图使所有矩形以没有可见空间可以看到背景的方式对齐。在上面链接的图像中,彩色矩形之间不应有黑色脊线。

这是我为每个“像素”添加矩形和文本的代码(这只是一个名为 Char 的类,它包含一个矩形和一个文本对象)。

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);

高度和宽度是在该 block 之前计算的,并根据所使用的字体确定。它们代表任何字符的宽度和高度,因为使用的字体是等宽字体。填充只是一个用于使“像素”居中的数字,也是在嵌套循环之前确定的。

字符类:

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);
}

最佳答案

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

在以下代码中,您将 xynxny 的分配替换为注释中会产生可见的间隙,但将 wh 更改为整数值,例如10,还可以防止可见的间隙:

@Override
public void start(Stage primaryStage) {
double w = 10.5;
double h = 10.5;

Pane pane = new Pane();

for (int i = 0; i < 57; i++) {
for (int j = 0; j < 57; j++) {
double x = Math.floor(i * w);
double y = Math.floor(j * h);
double nx = Math.floor((i + 1) * w);
double ny = Math.floor((j + 1) * h);
// double x = i * w;
// double y = j * h;
// double nx = (i + 1) * w;
// double ny = (j + 1) * h;
Rectangle rect = new Rectangle(x, y, nx - x, ny - y);
rect.setFill(Color.BLACK);
pane.getChildren().add(rect);
}
}

primaryStage.setScene(new Scene(pane, 600, 600));
primaryStage.show();
}

关于java - 删除矩形之间的间距 JavaFX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50597742/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com