2017-10-13 111 views
0

我剛剛在Java中做了一個可用的Pong遊戲,但是我對於FPS的工作原理有一些疑問。目前,遊戲的運行速度與計算機可以處理的速度一樣快,如果我在更快的計算機上運行遊戲,那麼遊戲的速度會比平時更快。我解決了這個通過添加一個計時器,以防止遊戲運行得太快:Java - 使FPS正常工作

timer = new Timer(5, this); 
timer.start(); 

然而,因爲計時器的,在FPS不能超過某一特定的限制無論計算機的運行速度。當FPS下降時,我不希望減慢程序速度,而是希望它像實際的電腦遊戲一樣「落後」。我該怎麼做呢?我想強制遊戲以一定的速度運行,因此FPS將下降而不是程序放慢。

我的FPS計數器目前看起來是這樣的:

if(System.currentTimeMillis() - time >= 1000){ 
     time = System.currentTimeMillis(); 
     fps = newfps; 
     newfps = 0; 
    } 
    else{ 
     newfps++; 
    } 
    g.setFont(new Font("Arial", Font.BOLD, 25)); 
    g.drawString(fps + "", 5, 22); 

請告訴我,如果我不清楚我的問題。

+0

你是什麼意思,「落後」?你想讓繪畫比遊戲運行慢嗎? – Igor

+0

如果FPS由於某種原因而下降,我希望程序跳過幀而不是放慢整個程序。我想停止程序放慢速度或運行速度太快。 – enheldel

+0

FPS最終會受到顯示硬件的限制。看看在您的遊戲中實現VSynch,以便以最佳的速度爲您的GPU和顯示器渲染數據。另外,請確保您使用的是雙緩衝 - https://docs.oracle.com/javase/tutorial/extra/fullscreen/doublebuf.html –

回答

0

它的核心是線程問題。使用(至少)一個線程爲您的遊戲進行所有計算,並使用另一個線程進行渲染。這意味着渲染週期將獨立於後臺處理,並且不應該有能力減慢渲染速度。

+0

我從來沒有學過關於製作線程,我可以嘗試找到一個關於如何做到這一點的教程,謝謝。 – enheldel

+0

當然可以。如果我的答案有幫助,請記住標記它 – Igor