Я не уверен, что мой код частоты кадров правильный, и я не смог найти точных примеров того, что я ищу.
По сути, у меня есть подкласс 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