2015-11-02 60 views
-1

什麼是每隔一段時間更新一次屏幕的最佳方式t圖形?假設使用update()調用更新方法,並且所有實際的圖形資料都在那裏發生,並且已經處理完畢,更新間隔的圖形

我已經使用了javax.swing.Timer,它在過去運行我的更新方法時觸發了一個指定時間間隔的動作事件,但計算機的速度仍然是一個因素。所以如果我正在做這個最好的方式(我懷疑)我該如何更新專屬於時間?

回答

1

Java中的系統時鐘調用不一定非常準確。在等待特定時間段時,有一種方法可以考慮更新時間。

在本例中,我們每40毫秒更新一次,或每秒更新25幀。

package com.ggl.testing; 

public class TimerRunnable implements Runnable { 

    private static final long interval = 40L; // 40 milliseconds 

    @Override 
    public void run() { 
     long startTime = System.currentTimeMillis(); 
     while (true) { 
      update(); 
      long endTime = System.currentTimeMillis(); 
      long elapsedTime = endTime - startTime; 
      elapsedTime = Math.max((interval - elapsedTime), 5L); 
      sleep(elapsedTime); 
      startTime = System.currentTimeMillis(); 
     } 
    } 

    private void sleep(long interval) { 
     try { 
      Thread.sleep(interval); 
     } catch (InterruptedException e) { 

     } 
    } 

    private void update() { 

    } 

} 

我們看到執行更新方法需要多長時間。我們計算經過的時間,並確保間隔減去經過時間不低於5毫秒。如果更新花費的時間超過35毫秒,我們將降低幀速率以跟上。

+0

爲了澄清,像javax.swing.Timer這樣的類是否仍然遵循順序執行而不是線程化actionPerformed?如果是這樣,那麼線程更新方法的回收是什麼,而不是你所建議的? –

+0

@Jared Massa:我從來沒有使用javax.swing.Timer,所以別人必須回答你的問題。我爲我的動畫使用Runnable類。 –