这让我发疯,完全没有道理。

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;
.../


这怎么可能?

最佳答案

看来您从未初始化oldTime。这可以解释您所看到的行为,即cameraPosX第一次获得很大的价值,然后几乎没有变化。

09-27 14:30