简单的java数学函数不起作用

时间:2015-03-17 18:03:52

标签: java math

这让我发疯,绝对没有意义。

private double currentTime, oldTime;
float dt;
float xMove = .125f; 
float yMove = .125f;
float cameraPosX = 1.0f;
float cameraPosY = 1.0f;


private void CameraMenuAnimation(){
    cameraPosX += xMove * dt;
    cameraPosY += yMove * dt;
    GameCamera.setCameraPos(cameraPosX, cameraPosY);
    System.out.println("xMove: " + xMove + " cameraDT: " + dt + " cameraPosX: "+ cameraPosX);
}

@Override
public void update() {
    currentTime = System.currentTimeMillis();
    dt = (float) (currentTime - oldTime);
    oldTime = currentTime;

    CameraMenuAnimation();
}

在上面的println语句中,它打印

  

System.out(21557):xMove:0.125 cameraDT:20.0 cameraPosX:   1.7832686E11

这打印在一个循环中,cameraDT:改变每个循环的值。 cameraPosX永远不会改变价值,价值太高了。这怎么可能?它只是CameraMenuAnimation()中的一个简单的乘法和加法语句。

此外,如果我硬编码dt的值,它就可以工作。

private void CameraMenuAnimation(){
        cameraPosX += xMove * 20.0;
        cameraPosY += yMove * 20.0;
.../

这怎么可能?

2 个答案:

答案 0 :(得分:2)

看起来你永远不会初始化oldTime。这可以解释您所看到的行为,cameraPosX第一次获得非常大的价值,然后几乎没有变化。

答案 1 :(得分:1)

您可以查看此

的分配值
dt = (float) (currentTime - oldTime);

我认为这会导致问题。