Java FPS控制游戏速度 背景资料

Java FPS控制游戏速度 背景资料,java,timer,lwjgl,frame-rate,Java,Timer,Lwjgl,Frame Rate,我最近开发了一款使用LWJGL的游戏,我很好奇在不使用Display.sync(60)功能的情况下运行游戏每秒可以获得多少帧(将fps限制为60)。在评论代码时,我偶然发现游戏速度以每秒9000多帧的速度更新,这反过来又使游戏每秒运行9000次 问题 我应该如何实现游戏计时器,以防止fps造成游戏实际运行速度的问题?我知道我需要将这两个计时器分开,但是如何/哪种方式最有效(在java中)?代码版提供了一个很好的教程: 但是,基本的答案是通过保存最后一个System.currentTime()来移

我最近开发了一款使用LWJGL的游戏,我很好奇在不使用Display.sync(60)功能的情况下运行游戏每秒可以获得多少帧(将fps限制为60)。在评论代码时,我偶然发现游戏速度以每秒9000多帧的速度更新,这反过来又使游戏每秒运行9000次

问题
我应该如何实现游戏计时器,以防止fps造成游戏实际运行速度的问题?我知道我需要将这两个计时器分开,但是如何/哪种方式最有效(在java中)?

代码版提供了一个很好的教程:

但是,基本的答案是通过保存最后一个System.currentTime()来移动帧,然后将其与此System.currentTime()进行比较。然后,当移动时,它会像
object.move(x*delta,y*delta)

引用上面的链接

// Under the class definition
private static long lastFrame;
private static long getTime() {
return (Sys.getTime() * 1000) / Sys.getTimerResolution();
}
private static double getDelta() {
long currentTime = getTime();
double delta = (double) currentTime - (double) lastFrame;
lastFrame = getTime();
return delta;
}
// In initialization code
lastFrame = getTime();
// In game loop
long delta = getDelta();
movement_x += dx * delta;

我希望这能有所帮助:)。

请参阅《信息丰富的Java杀手游戏编程》第2章。我感谢你的帮助。该图类似于。此外,您可能还需要考虑加速度(例如,每毫秒加速度*增量,而不是每帧加速度)。@1337我实际上不知道您在说什么。你能解释一下吗?通常在游戏开发中,物体有一个速度,因为我们想要有平滑的运动,我们用velocity.xdelta和velocity.ydelta移动这些物体。但是,通常,您希望将这些对象(当向右或向左移动、重力、跳跃等)加速一个因子x。为了避免加速度依赖于FPS,您应该将该系数x作为每帧的每毫秒系数(因此您可以将其与增量相乘),这似乎是一种常见的方法。