对于应该是一个非常简单的计算,我得到了一个非常奇怪的输出。我正在尝试根据增量平稳地移动相机。如果您看下面的CameraMenuAnimation(),xMove和cameraDT将被相乘并添加到cameraPosX中。 cameraPosX然后吐出1.7832639E11。这没有道理吗? CameraPosY做同样的事情。
private double currentCameraTime, oldCameraTime, cameraFrameTime, cameraDT;
float cameraPosX = 1.0f;
float cameraPosY = 1.0f;
xMove = .125f;
yMove = .125f;
private void CameraMenuAnimation(){
cameraPosX += (xMove * cameraDT);
cameraPosY += (yMove * cameraDT);
GameCamera.setCameraPos(cameraPosX, cameraPosY);
System.out.println("xMove: " + xMove + " cameraDT: " + cameraDT + " cameraPosX: "+ cameraPosX);
}
@Override
public void update() {
//some accumulator variables up here that I removed
while (accumulator >= step) {
currentCameraTime = System.currentTimeMillis();
cameraFrameTime = currentCameraTime - oldCameraTime;
cameraDT = cameraFrameTime;
CameraMenuAnimation();
oldCameraTime = currentCameraTime;
accumulator -= step;
}
它从上面的println语句中打印出来。这根本没有意义。
System.out(8714):xMove:0.125 cameraDT:31.0 cameraPosX:1.7832639E11
最佳答案
很难说,因为您没有给出完整的示例,但是看起来oldCameraTime尚未初始化,因此第一个cameraDT可能非常大。
关于java - Java Double和Float数学行为异常,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29105241/