3

フレームレートコードが正しいとは確信できません。また、探しているものの正確な例を見つけることができませんでした。

基本的に、私はサブクラスjava.awt.Component化しており、メソッド内で関数paint(Graphics)を呼び出しcalculateFrameRate()ます。これを以下に示します。でインクリメンタル描画は行いませんupdate()。これからの数は多いようですが、Componentクラスの固有のダブルバッファリングは、ペイントがレンダリングされている量の2倍の量で呼び出されていることを意味するのでしょうか。私はダブルバッファのものにさびていますが、それは完全に間違っているかもしれません。

フレームレートの方法は次のとおりです。

 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);

}

乾杯、

ハミー

4

1 に答える 1

1

別の方法として、を見ることができますSystem.nanoTime()。このでは、で定義された前のフレーム数の平均を計算しFRAMESます。

于 2010-11-16T16:17:12.070 に答える