Правильный поиск частоты кадров в пользовательском компоненте Java - PullRequest
3 голосов
/ 16 ноября 2010

Я не уверен, что мой код частоты кадров правильный, и я не смог найти точных примеров того, что я ищу.

По сути, у меня есть подкласс java.awt.Component, и внутри метода paint(Graphics) я вызываю функцию calculateFrameRate(), которая показана ниже. Я не делаю никакого инкрементального рисования в update(). Числа из этого кажутся высокими, и я задаюсь вопросом, означает ли внутренняя двойная буферизация класса Component, что краска вызывается в два раза больше, чем она отображается Хотя я не очень хорошо разбираюсь с двойным буфером, это может быть совершенно неверно.

Вот метод частоты кадров:

 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

1 Ответ

1 голос
/ 16 ноября 2010

В качестве альтернативы вы можете посмотреть на System.nanoTime(). Этот пример вычисляет среднее значение за предыдущее количество кадров, определенных как FRAMES.

...