如何将2D网格缩放到画布的大小?

时间:2016-08-01 02:07:07

标签: java javafx

我正在使用JavaFX中Conway的生命游戏的基于网格的简单变体,我正在使用我在StackExchange上找到的一个例子。问题是该示例中的缩放方法似乎对我不起作用。在这个例子中,你可以选择网格的“大小”,意味着它由多少行/列组成,然后缩放应该确定该网格中每个单元格的大小,允许网格适合画布,如果用户调整窗口大小。

我通过尝试使用(0,0)和((xMax - 1),(yMax - 1))“填充”左上角和右下角的单元格来测试这一点。但是右下角似乎已经超出了画布的范围,因为我必须从yMax中减去1以上才能显示它。

以下是我正在使用的“缩放因子”方法......

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

这种方法有什么问题吗?这可能是我构建GUI的方式吗?画布绑定到BorderPane的中心,并且有一个HBox绑定到顶部,VBox绑定到左边。但是,我已经能够像往常一样使用(width / 2)和(height / 2)在画布的中心绘制东西,所以有些东西告诉我,如何获得缩放因子是错误的。

有人能帮助我吗?

1 个答案:

答案 0 :(得分:2)

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

假设以下两种情况:

  1. 您的画布为100 x 10,包含1行和10列
  2. 您的画布为100 x 20,包含1行和10列
  3. 在第一种情况下,比例因子将是$@,理想情况下,这将导致单元格的大小使得它们完全填满画布。然而,在第二种情况下,比例因子将是(100 + 10) / (1 + 10) = 10,这意味着第二种情况下的单元格大于第一种情况下的单元格。由于宽度没有变化,并且在第一种情况下使用了整个画布,因此第二种情况下较大的单元格必须从画布上运行。

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

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

    (100 + 20) / 1 + 10) = 10.909091

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