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

时间:2014-10-25 04:12:38

标签: java lwjgl frame-rate timedelta

我最近开始开发自己的游戏引擎以获得乐趣。我实现了一个方法从文件加载Blender .OBJ模型,我成功地渲染它们。然而,在进行压力测试时,我遇到了基于Delta-time的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());

有没有人有任何想法?这是delta-time应该如何工作的?当以16FPS运行时,它返回大约65,在120FPS Delta返回大约8-9,而无上限FPS它总是返回0或1,如果这有所不同或帮助您发现是否有问题的无上限FPS。非常感谢任何帮助,谢谢你们。

1 个答案:

答案 0 :(得分:0)

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

我的问题,我后来在实现角度移动时发现的,是我每次需要多次使用方法getDelta()和getFPS()时,每帧丢失三次变量。我通过使用静态变量解决了这个问题,一个用于FPS,一个用于Delta,并在每个帧的末尾更新每个变量。

伪代码:

public static double globalDelta;

while(nextFrame) //Loops once per frame
{
    updateGame();

    globalDelta = calculateDelta();
}