背景信息
我最近一直在使用 LWJGL 开发一款游戏,我很好奇在不使用 Display.sync(60) 函数(这将 fps 限制为 60)的情况下运行游戏可以获得多少帧每秒。在注释掉代码后,我偶然发现游戏速度更新为 9000 fps,这反过来又使游戏每秒运行 9000 次。
问题
我应该如何实现游戏计时器以防止 fps 造成游戏实际运行速度的问题?我知道我需要分开两个计时器,但是如何/哪种方式是最有效的(在java中)?
最佳答案
TheCodingUniverse 在这里提供了一个很棒的教程:http://thecodinguniverse.com/lwjgl-frame-rate-independent-movement/
但是,基本答案是通过保存最后一个 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 - FPS控制游戏速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24729328/