Java float失败乘法,在修改对象的位置时添加

时间:2010-11-20 22:03:28

标签: java jogl

浮点数在我的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,则对象移动。

这个错误在哪里?有什么关于花车我不知道吗?

2 个答案:

答案 0 :(得分:3)

请注意:

2.58058064E8

是2.58亿。您正在添加

0.0024 

,不会改变任何东西......

如果您不熟悉浮点数的这种表示,请查看此处的文章:

答案 1 :(得分:1)

我的猜测是你从lastDrawn == 0开始,这将首先构成一个超大号的moveZ。

编辑:您应该将 timeElapsed 转储到控制台,它应该让光线进入黑暗状态。