我最近开始开发我自己的游戏引擎来取乐。我实现了一种从文件中加载Blender .OBJ模型的方法,并且正在成功地呈现它们。然而,在做压力测试时,我遇到了一个不寻常的困境,因为我的基于Delta的fps系统。当我跑到1500 end的时候,我花了4秒的时间从一堵墙向另一头望去。但是,如果我将FPS设置为120 FPS,那么我只需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 FPS时,它返回约65,在120 FPS Delta返回约8-9,而无上限FPS总是返回0或1,如果这有区别,或帮助您发现有什么不对劲的无上限FPS。我真的很感谢你们的帮助,谢谢你们。
发布于 2014-10-26 06:13:47
解决了我自己的问题,很高兴我在这个过程中学会了。
我后来在实现角运动时发现了我的问题,那就是我每次需要时都使用getDelta()和getFPS()方法,这就抛出了增量变量。我解决了这个问题,使用了一个静态变量,一个用于FPS,一个用于Delta,并在每个帧的末尾更新每个变量。
伪码:
public static double globalDelta;
while(nextFrame) //Loops once per frame
{
updateGame();
globalDelta = calculateDelta();
}https://stackoverflow.com/questions/26559257
复制相似问题