float 在我的 Java/JOGL (OpenGL for Java) 程序中没有按预期计算。在绘制方法中,当调用每一帧(每秒 60 帧)时,我尝试修改对象的位置。所有值都是浮点值。
float timeElapsed=((float)(System.currentTimeMillis()-lastdrawn))/1000;
float moveZ=(timeElapsed*momentumZ);
System.out.println(moveZ);
this.transformation.z+=moveZ;
System.out.println(this.transformation.z);
由于 momentumZ
是用 0.2f 初始化的,而 this.transformation.z 是用 0.0f 初始化的,因此对象应该在 z 轴上移动。但我的输出是:
...
0.0024
2.58058064E8
0.0052
2.58058064E8
8.0000004E-4
2.58058064E8
0.001
2.58058064E8
因此,moveZ 具有正确的值,但相加却将其搞乱了。如果我尝试每帧添加一个常量值,例如 0.05f,则对象会移动。
这个错误可能出在哪里?关于 float 还有什么我不知道的吗?
最佳答案
请注意:
2.58058064E8
约为 2.58 亿。您正在添加
0.0024
对此,不会改变任何事情......
如果您不熟悉 float 的这种表示形式,请查看此处的文章:
关于Java float在修改对象位置时无法进行乘法、加法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4235247/