我正在使用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)在画布的中心绘制东西,所以有些东西告诉我,如何获得缩放因子是错误的。
有人能帮助我吗?
答案 0 :(得分:2)
您当前使用的公式看起来应该不起作用。
假设以下两种情况:
在第一种情况下,比例因子将是$@
,理想情况下,这将导致单元格的大小使得它们完全填满画布。然而,在第二种情况下,比例因子将是(100 + 10) / (1 + 10) = 10
,这意味着第二种情况下的单元格大于第一种情况下的单元格。由于宽度没有变化,并且在第一种情况下使用了整个画布,因此第二种情况下较大的单元格必须从画布上运行。
由于我不太了解如何使用比例因子,我无法真正提供太多帮助以解决您目前所拥有的问题,但是:
假设比例因子是单元格的边长(以像素为单位),并且当窗口调整为不同的宽高比时单元格保持方形,这里有一个应该有效的公式:
(100 + 20) / 1 + 10) = 10.909091
如果单元格要填满整个屏幕高度,则计算单元格的高度;如果单元格要填满整个屏幕宽度,则计算单元格的宽度。然后,它采用最小尺寸来确保所有单元格都适合屏幕。