Время разности не работает корректно в игровом движке — LWJGL

#java #lwjgl

#java #lwjgl

Вопрос:

Я пытаюсь создать простой игровой движок и пытаюсь сделать время дельты доступным для пользователя. Вот как оно вычисляется и передается пользователю (они получают его как значение с плавающей точкой):

 float deltaTime;
long lastLoop = System.nanoTime();
UpdateInfo updateInfo = new UpdateInfo(0, 0, gameInstance.window.getWindowHandle());

while (!glfwWindowShouldClose(gameInstance.window.getWindowHandle()))
{
    deltaTime = (float)((System.nanoTime() - lastLoop) / 1000000f);
    updateInfo.setDeltaTime(deltaTime);

    if (gameInstance.window.isFPSCounterEnabled())
    {
        if (System.currentTimeMillis() - lastFrameCount >= 1000)
        {
            fps = frames;
            frames = 0;
            lastFrameCount = System.currentTimeMillis();
        }
    }
    else
    {
        fps = -1;
    }

    updateInfo.setFPS(fps);
    gameInstance.updateGame(updateInfo);
    gameInstance.drawGame(gameInstance.window.getDrawboard());
    lastLoop = System.nanoTime();
    glfwPollEvents();
}
 

Но когда я проверяю значение времени дельты при перемещении спрайта по экрану, оно действительно прерывистое. Это происходит как при включении, так и при отключении VSync. Я неправильно рассчитываю или моя игра нестабильна?

Комментарии:

1. Можете ли вы определить прерывистый? Как данные упорядочиваются (случайным образом, увеличиваются, а затем внезапно уменьшаются и т. Д.)? Что касается времени дельты, я вижу одну вещь: переменная lastLoop должна быть установлена сразу после установки времени дельты, а не после выполнения всей логики.

2. Я думал, что время дельты должно быть измеренным временем между рисованием / рендерингом?

3. Это правильно, но у вас оно измеряется просто glfwPollEvents()