#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()