我正在用Java编写“重力模拟器”,其中仅包含一个具有x和y力的球。
我目前的操作方式(无效)如下:
程序规则:4像素计为1米。重力是9.8m / s ^ 2,所以地球重力。
在我的主班我有这个:
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();
}
所以。我将如何在此“游戏”中实施一个有效的fps系统,从而不影响球的运动速度?
如果您想要提供更多信息,只需请我提供。
最佳答案
一种常见的解决方案是使所有模拟方法都将自上一帧以来经过的秒数作为参数。例如public void move(float secondsElapsed)
。
然后,在该主线程中,使用System.currentTimeMilis()
测量自上一帧以来经过的时间,不要假设Thread.sleep(17);
会准确休眠17毫秒。
这有两个优点:1)超级容易地更改所需的FPS; 2)即使游戏FPS掉落,您的对象也将以正确的速度移动。