gpt4 book ai didi

java - 如何将 2D 网格缩放到 Canvas 的大小?

转载 作者:行者123 更新时间:2023-11-30 08:34:45 24 4
gpt4 key购买 nike

我正在使用 JavaFX 制作一个简单的基于网格的 Conway 生命游戏变体,我使用的是我在 StackExchange 上找到的示例。问题是那个例子中的缩放方法似乎对我不起作用。在此示例中,您可以选择网格的“大小”,即它由多少行/列组成,然后比例应该确定该网格中每个单元格的大小,从而使网格适合内部如果用户调整窗口大小, Canvas 。

我通过使用 (0,0) 和 ((xMax - 1), (yMax - 1)) 尝试“填充”左上角和右下角的单元格来对此进行测试。但是右下角的那个似乎超出了 Canvas 的边界,因为我必须从 yMax 中减去超过 1 才能让它出现。

这是我正在使用的“比例因子”方法...

private double getScaleFactor() {
return (canvas.getWidth() + canvas.getHeight()) / (cellsWide + cellsHigh);
}

这个方法有什么问题吗?这可能是我构建 GUI 的方式吗? Canvas 绑定(bind)到 BorderPane 的中心,顶部绑定(bind)一个 HBox,左侧绑定(bind)一个 VBox。但是,我已经能够像往常一样使用 (width/2) 和 (height/2) 在 Canvas 的中心绘制东西,所以有些事情告诉我获取比例因子的方式有问题。

有人可以帮帮我吗?

最佳答案

您当前使用的公式看起来不应该起作用。

假设有以下两种情况:

  1. 你有一个 100 x 10 的 Canvas ,有 1 行和 10 列
  2. 你有一个 100 x 20 的 Canvas ,1 行 10 列

在第一种情况下,比例因子将是 (100 + 10)/(1 + 10) = 10,理想情况下,这会导致单元格的大小能够完全填满 Canvas 。但是,在第二种情况下,比例因子将为 (100 + 20)/1 + 10) = 10.909091,这意味着第二种情况下的单元格比第一种情况下的单元格大。由于宽度没有改变,并且在第一种情况下使用了整个 Canvas ,因此第二种情况下较大的单元格必须超出 Canvas 。

由于我不太了解比例因子是如何使用的,所以我无法就您目前所拥有的问题提供太多帮助,但是:

假设比例因子是单元格的边长(以像素为单位),并且当窗口调整为不同的宽高比时单元格保持正方形,下面是一个应该有效的公式:

private double getScaleFactor()
{
double hfactor = canvas.getHeight() / cellsHigh;
double wfactor = canvas.getWidth() / cellsWide;

return (hfactor < wfactor ? hfactor : wfactor);
}

如果单元格要填满屏幕的整个高度,则计算单元格的高度;如果单元格要填满屏幕的整个宽度,则计算单元格的宽度。然后它采用最小尺寸以确保所有单元格都适合屏幕。

关于java - 如何将 2D 网格缩放到 Canvas 的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690076/

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