对于应该是一个非常简单的计算,我得到了一个非常奇怪的输出。我正在尝试根据增量平稳地移动相机。如果您看下面的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/

10-10 02:52