因此,我有一些代码可以通过将“理想”屏幕的大小除以用户屏幕的大小来将图形缩放到用户屏幕的大小。她是我在做什么的代码片段:
public void setScaleFactor(GameContainer ui) { scaleFactorWidth = 2880 / ui.getWidth(); scaleFactorHeight = 1800 / ui.getHeight(); System.out.println("Screen measured as: " + Integer.toString(ui.getWidth()) + "x" + Integer.toString(ui.getHeight())); System.out.println("Scale factors are: " + Double.toString(scaleFactorWidth) + " " + Double.toString(scaleFactorHeight)); textScale = (scaleFactorWidth + scaleFactorHeight) / 2; System.out.println("Text scale is: " + Double.toString(textScale)); }
现在,如果我在计算机上(屏幕分辨率为1440x900的Mac Book pro)运行此程序,结果是“ scaleFactorWidth”设置为2.0,而“ scaleFactorHeight”设置为2.0,这是预期的,因为我的屏幕正好是一半目标的大小。但是,如果在具有不同分辨率屏幕的计算机上运行此代码,则scaleFactors似乎会被四舍五入,我在1024x600的屏幕上进行了测试,并且在应将“ scaleFactorWidth”设置为2.0时将“ scaleFactorHeight”设置为3.0。已经是2.8125 x 3.0。
这是Java中的某种舍入错误吗?如果是的话,我该如何解决?
编辑: 感谢所有的帮助,我意识到我非常愚蠢,因为我需要做的只是将.0添加到2880和1800。
在这些行中
scaleFactorWidth = 2880 / ui.getWidth(); scaleFactorHeight = 1800 / ui.getHeight();
计算本身是基于整数的(根据的后续调用Integer.toString())。然后只将结果强制转换为double。
Integer.toString()
double
为了使实际的计算使用double值,请改用以下代码:
scaleFactorWidth = 2880.0 / ui.getWidth(); scaleFactorHeight = 1800.0 / ui.getHeight();
要么
scaleFactorWidth = 2880.0 / (double)ui.getWidth(); scaleFactorHeight = 1800.0 / (double)ui.getHeight();