Java 实施一个有效的 FPS 系统

Java Implementing A Working FPS System

我正在 java 中编码一个 "Gravity Simulator",它只包含一个具有 x 和 y 力的球。

我目前使用的方法(无效)如下:

程序规则:4个像素为1米。重力为9.8m/s^2,所以地球重力。

在我的主要 class 我有这个:

public int sleepMilli = 17; //the thread will sleep 17 milliseconds after every execution
public double g = 9.8; //gravity

然后,在主循环中我有这个:

try {
            Thread.sleep(17);
        } catch (InterruptedException e) {
            System.out.println("Thread couldn't sleep.");
            e.printStackTrace();
        }

所以。我将如何在这个 "game" 中实现一个有效的 fps 系统,这样它就不会影响球的移动速度?

如果您想要提供更多信息,只需让我这样做即可。

一个常见的解决方案是使 all 您的模拟方法将自上一帧以来经过的秒数作为参数。例如 public void move(float secondsElapsed).

然后,在该主线程中,使用 System.currentTimeMilis() 测量自上一帧以来经过的时间,不要假设 Thread.sleep(17); 将正好休眠 17 毫秒。

这有两个优点:1) 非常容易更改所需的 FPS 和 2) 即使游戏 FPS 下降,您的对象也会以正确的速度移动。