| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > пояснение игрового цикла |
| Автор: isalex678 12.10.2011, 13:25 | ||||
| Поясните игровой цикл. за что отвечают переменные: averagePassedTime, naiveTiming для чего надо alpha и какое её назначение Thread.sleep(8); почему 8? многое непонятно. где почитать на русском про игровые циклы.
зачем надо было запускать дополнительный поток ? подставляю this.run() - без него работает (может автор что то хотел сказать)
|
| Автор: Nofate 12.10.2011, 15:03 |
| Ну там же все расписано в комментариях. В начала каждого прохода цикла, мы замеряем время, прошедшее с предыдущего прохода. Т.е., грубо говоря, на сколько должно продвинуться игровое время. Если замеренная величина меньше ноля (судя по комментариям автора это случается на двухъядерных процах от AMD), то отказываемся от "наивного" замера времени и ориентириуемся на среднее время выполнения цикла (а именно на взвешенную сумму среднего времени и измеренного времени в соотношении). Дальше секунды переводятся в тики, идет судя по всему отрисовка сцены, выводится FPS. Alpha - это количество тиков, на которое проматывается игровое время. Thread.sleep(8) добавляет в каждый цикл задержку и, таким образом, ограничивает минимальное время выполнения цикла. Это делается для того, чтобы не перерисовывать сцену слишком часто и снижает нагрузку на процессор. Число 8 автор, скорее всего, подобрал эмпирически. Я, например, для некритичных обновлений нередко использую 100-200 мс. Про использование потока сказать что-то конкретное трудно вне контекста остальной программы. Но, видимо, раз автор его использовал, значит зачем-то это было нужно, не так ли? Читать про игровые циклы особо нечего. Все, как правило, идет по стандартной схеме: вычисляем прошедшее время, обновляем состояние игровых объектов и подсистем (физика, геймплей, гуй, звук, мышиноклавиатурный ввод), рисуем очередной кадр. |