LWJGL在更高的FPS下运行更慢?(三角洲)



为了好玩,我最近开始开发自己的游戏引擎。我实现了一种从文件中加载Blender.OBJ模型的方法,并成功地渲染了它们。然而,在进行压力测试时,我的基于德尔塔时间的fps系统遇到了一个不同寻常的困境。在1500FPS的速度下运行时,我需要4秒才能从模型墙的一端看到另一端。然而,如果我将FPS限制在120FPS,从墙的一端到另一端只需要0.84秒。随着我的进一步探索,事实上,游戏移动速度似乎随着FPS的增加而降低。

这是我的Timer类:

class Timer
{
    long lastFrame;
    int fps;
    long lastFPS;
    int delta;
    int fpsToReturn;

    public Timer()
    {
        lastFPS = getTime();
    }
    public long getTime()
    {
        return (Sys.getTime() * 1000) / Sys.getTimerResolution();
    }
    public int getDelta()
    {
        long time = getTime();
        delta = (int) (time - lastFrame);
        lastFrame = time;
        return delta;
    }
    public void updateFPS()
    {
        if (getTime() - lastFPS > 1000)
        {           
            fpsToReturn = fps;
            fps = 0;
            lastFPS += 1000;
        }
        fps++;
    }
    public int getFPS()
    {
        return fpsToReturn;
    }
}

当然,移动只是沿着的路线

camera.rotX += (0.5 * timer.getDelta());

有人有什么想法吗?德尔塔时间应该是这样工作的吗?当以16FPS运行时,它会返回65左右,在120FPS时,德尔塔会返回8-9左右,而无上限的FPS总是返回0或1,如果这有影响或有助于您发现无上限的FPS是否有问题的话。我真的很感谢你们的帮助,谢谢你们。

解决了我自己的问题,很高兴我在这个过程中学会了。

我后来在实现角度移动时发现了我的问题,那就是每次我需要它时,我都会使用getDelta()和getFPS()方法,每帧不止一次,这就抛出了delta变量。我通过使用一个静态变量(一个用于FPS,一个用于Delta)并在每帧结束时更新每个变量来解决这个问题。

伪代码:

public static double globalDelta;
while(nextFrame) //Loops once per frame
{
    updateGame();
    globalDelta = calculateDelta();
}

最新更新