Недавно я начал разрабатывать свои собственные игровые движки для развлечения. Я реализовал метод загрузки моделей Blender .OBJ из файлов и успешно их визуализирую. Однако при проведении стресс-теста я столкнулся с необычным затруднением с моей системой fps, основанной на дельта-времени. При скорости 1500 кадров в секунду мне требуется 4 секунды, чтобы перевести взгляд с одного конца стены моделей на другой. Однако, если я ограничу FPS на уровне 120FPS, мне потребуется всего 0,84 секунды, чтобы посмотреть с одного конца стены на другой. По мере того, как я исследовал дальше, казалось, что на самом деле скорость движения в игре уменьшается с увеличением FPS.
Вот мой класс таймера:
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());
У кого-нибудь есть идеи? Это то, как должно работать дельта-время? При работе со скоростью 16 кадров в секунду он возвращает около 65, при 120 кадрах в секунду Delta возвращает около 8-9, в то время как без ограничения FPS всегда возвращает 0 или 1, если это имеет значение или помогает вам определить, что что-то не так с неограниченным FPS. Я очень ценю любую помощь, спасибо, ребята.