所以我有一些代码可以通过将“理想”屏幕的大小除以用户屏幕的大小来将图形缩放到用户屏幕的大小。她是我正在做的代码片段:
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));
}
现在,如果我在我的电脑上运行(Mac Book pro,屏幕分辨率为1440x900),那么“scaleFactorWidth”设置为2.0,“scaleFactorHeight”设置为2.0,这是我的屏幕预期的正好是目标尺寸的一半。但是如果在具有不同分辨率屏幕的计算机上运行此代码,则scaleFactors似乎被四舍五入,我在1024x600的屏幕上运行测试,并且“scaleFactorWidth”设置为2.0“scaleFactorHeight”设置为3.0时应该已经2.8125 x 3.0。
这是java中的某种舍入错误,如果是这样,我该如何解决?
编辑:感谢所有的帮助,我意识到我非常愚蠢,因为我需要做的就是添加.0到2880和1800.
答案 0 :(得分:4)
在这些行中
scaleFactorWidth = 2880 / ui.getWidth();
scaleFactorHeight = 1800 / ui.getHeight();
计算本身是基于整数的(根据后来的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();
答案 1 :(得分:1)
如果您正在讨论此GameContainer
课程,getWidth()
和getHeight()
会返回一个int。
所以你必须把它作为双重
scaleFactorWidth = (double)2880 / ui.getWidth();
scaleFactorHeight = (double)1800 / ui.getHeight();
答案 2 :(得分:1)
将它投射到Double。
scaleFactorWidth = (Double)2880 / ui.getWidth();
scaleFactorHeight = (Double)1800 / ui.getHeight();
答案 3 :(得分:0)
ui.getWidth和ui.getHeight()返回int,当你对int执行操作时,它会再次返回int。所以将你的int值转换为Double。
Double scaleFactorWidth = new Double(2880) / new Double(ui.getWidth());
Double scaleFactorHeight = new Double(1800) / new Double(ui.getHeight());
检查以下样本,
public static void main(String[] args) {
Double scaleFactorWidth = new Double(2880) / new Double(1024);
Double scaleFactorHeight = new Double(1024) / new Double(600);
System.out.println("Scale factors are: "
+ Double.toString(scaleFactorWidth) + " "
+ Double.toString(scaleFactorHeight));
Double textScale = (scaleFactorWidth + scaleFactorHeight) / 2;
System.out.println("Text scale is: " + Double.toString(textScale));
}
输出:
Scale factors are: 2.8125 1.7066666666666668
Text scale is: 2.2595833333333335