2015-06-20 69 views
0

我在java中編寫了一個「Gravity Simulator」,它只包含一個具有x和y力的球。Java實現工作FPS系統

我做它的時刻(不工作)的方式如下:方案的

規則: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系統到這個「遊戲」中,所以它不會影響球的移動速度?

如果您想要提供更多信息,只需要求我這樣做。

+0

對不起,什麼是[fps](https://en.m.wikipedia.org/wiki/FPS)? – Pang

+0

每秒幀數@Pang .... – PeterLikesCode

+0

什麼是fps系統? – andih

回答

1

一個常見的解決方案是使全部您的模擬方法將自上一幀以來經過的秒數作爲參數。例如public void move(float secondsElapsed)

然後,在該主線程中,使用System.currentTimeMilis()測量自上一幀以來經過的時間,不要認爲Thread.sleep(17);將會精確地睡17個毫秒。

這有兩個好處:1)超級容易改變所需的FPS和2)即使遊戲FPS下降,你的物體也會以正確的速度移動。

+0

所以,在主循環(while(true))我不應該讓線程睡眠呢?儘可能快地執行? @kajacx – PeterLikesCode

+0

@PeterLikesCode最大FPS,當然。或者你可以讓我們說最高60,所以你會等待。 – kajacx

+0

我要看看我是否能夠正常工作,然後回覆/標記這是「答案」 – PeterLikesCode