我最近开始开发自己的游戏引擎以获得乐趣。我实现了一个方法从文件加载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。非常感谢任何帮助,谢谢你们。
答案 0 :(得分:0)
解决了我自己的问题,很高兴我在这个过程中学到了。
我的问题,我后来在实现角度移动时发现的,是我每次需要多次使用方法getDelta()和getFPS()时,每帧丢失三次变量。我通过使用静态变量解决了这个问题,一个用于FPS,一个用于Delta,并在每个帧的末尾更新每个变量。
伪代码:
public static double globalDelta;
while(nextFrame) //Loops once per frame
{
updateGame();
globalDelta = calculateDelta();
}