3
我不確定我的幀速率代碼是否正確,而且我一直無法找到正在查找的確切示例。正確地在自定義Java組件上查找幀速率
本質上,我已經子類java.awt.Component
,並在paint(Graphics)
方法內呼叫我的calculateFrameRate()
函數,如下所示。 update()
中我沒有做任何增量繪圖。從這個數字看起來很高,我想知道是否組件類固有的雙緩衝意味着油漆被調用兩次,因爲它正在呈現?儘管如此,我在雙緩衝區中生鏽了,但這可能完全不正確。
這裏是幀速率的方法:
private List<Long> updateTimes = new ArrayList<Long>();
private void calculateFrameRate() {
long time = System.currentTimeMillis();
updateTimes.add(new Long(time));
// We will have the wrong framerate for the first 30 draws. No big.
float timeInSec = (time - updateTimes.get(0))/1000f;
currentFrameRate_ = 30f/timeInSec;
if (updateTimes.size() == 31)
updateTimes.remove(0);
}
乾杯,
Hamy
原來,我的方法與您給出的例子精確匹配。那麼,大多數;)只適用於複雜的繪畫。我的方法不僅測量繪畫功能中的時間,還計算繪畫之間的時間。如果你有簡單的繪畫,那麼給出的例子將會錯過總時間中相對較大的比例,因爲繪畫所需的時間只佔總數的很小一部分,因此會給你提供更高的fps。我不知道在fps計算中是否有'正確'的答案,但是我要用總秒數的幀數來計算,而不是每秒鐘在幀數中花費的幀數;) – Hamy 2010-11-16 17:44:33
我明白了你的觀點:我通常會盡量減少在paint()中花費的時間,但是你正在考慮優化整體速率(fps)。 – trashgod 2010-11-16 22:08:22