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 下降,您的对象也会以正确的速度移动。
我正在 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 下降,您的对象也会以正确的速度移动。