* 1016)* Со временем мое внутреннее время кадра и время монитора будут становиться все более несинхронными, вызывая много неожиданных пропаданий кадров. Это полностью нарушает мою функцию GetEndTick()
, которая в основном нарушает все: логику пропуска кадров, ограничитель частоты кадров и, самое главное, update(tick_frame_end)
не работает.
Итак, вопросы:
1. Как узнать время окончания текущего кадра?
В моем коде выше время окончания рассчитывается исходя из предположения, что в каждую секунду есть 60 четных кадров. Если это правда, мое внутреннее время кадра может не совпадать идеально с временем кадра дисплея, но все равнобыть в синхронизации, что достаточно полезно.
(Все было рассчитано на основе отметки времени окончания кадра, идея в том, что я генерирую изображение на основе времени fконец rame, то есть момент до того, как на экране отобразится следующий кадр.)
Я попытался записать время в начале цикла (или сразу после рендеринга последнего кадра) и добавить к нему время, равное 1 кадру- Не работает , поскольку записанное время не является надежным из-за загрузки системы, фоновых процессов и многих других вещей. Также мне понадобится новый метод, чтобы определить, какой кадр является текущим.
2. Если (1.) невозможно, как я могу исправить свой игровой цикл?
Я прочитал печально известный Fix Your Timestep! от Гленна Фидлера, но все же об игрефизика не графическая и не дает мне ответа на первый вопрос.