# Поймите часы внутри игрового цикла
Каждый отрисованный кадр передаёт игре новое значение прошедшего времени. В цикле с переменным delta движение часто обновляется так: position += velocity × frameTime. При стабильных кадрах средняя скорость близка к заданной, но одна операция может стать такой же большой, как вызвавший её кадр. Поэтому hitch не просто задерживает изображение: он меняет количество игрового времени, потраченное этой операцией. # Сравните переменную интеграцию с фиксированным аккумулятором
Цикл с фиксированным timestep добавляет длительность каждого кадра в аккумулятор, а затем многократно расходует выбранный шаг, например 16,667 мс. Симуляция получает одинаковые обновления, а рендер может идти в другом ритме. Оставшаяся дробная часть хранится до следующего кадра. Если кадр длинный, фиксированный цикл выполняет несколько маленьких обновлений, чтобы учесть прошедшее время. Размер шага остаётся стабильным, но возникает всплеск догоняющей работы. | Стабильный рендер | Одна операция использует обычную длительность кадра | Равные шаги расходуют накопленное время | Оба пути должны близко следовать одному движению. |
| Длинный кадр | Большая операция может слишком далеко сдвинуть объект | Несколько фиксированных операций догоняют время | Смотрите расхождение вместе с числом шагов. |
| Другая частота рендера | Размер операции меняется вместе с частотой кадров | Шаг симуляции остаётся прежним | Фиксированные шаги уменьшают зависимость от рендера. |
| Предел delta | Время выше предела игнорируется | Аккумулятор получает всю длительность кадра | Ограничивайте только при приемлемой потере времени. |
# Посмотрите на настоящий эффект скачка кадра
При 60 кадрах в секунду обычный кадр длится около 16,667 мс. При дополнительном скачке в 80 мс один кадр длится примерно 96,667 мс. Переменная модель расходует всё это время за одну операцию. Фиксированная модель вместо этого выполняет около шести шагов по 16,667 мс. Общее прошедшее время может совпасть, хотя путь симуляции будет разным. # Читайте расхождение позиции вместе с догоняющей работой
Разница позиций равна переменному пути минус фиксированный путь. Она показывает, насколько разошлись правила интеграции, но не определяет автоматически правильный вариант. Число догоняющих шагов показывает объём фиксированной работы в одном отрисованном кадре. Большая разница указывает на видимое расхождение движения, а большое число шагов может указывать на проблему бюджета CPU. Это связанные, но разные диагнозы. # Считайте ограничение delta политикой
Предел может помешать паузе вкладки, breakpoint или тяжёлому hitch отправить персонажа телепортом или протолкнуть физическое тело сквозь геометрию. Цена состоит в том, что переменные часы отстанут от реального времени. Если игре важно сохранить время, используйте фиксированный аккумулятор или другую стратегию восстановления. Если важно ограничить скачок и сохранить отзывчивость, предел может подойти, но потеря времени должна быть осознанной. # Выбирайте цикл по задаче, которую он защищает
| Физика, столкновения или детерминированный геймплей | Фиксированный timestep | Одинаковые шаги уменьшают зависимость симуляции от ритма рендера. |
| Простое визуальное движение без накопления состояния | Переменный delta | Обновление мало и обычно не требует очереди догоняющих шагов. |
| Симуляция геймплея с плавным рендером | Фиксированное обновление с интерполяцией | Симуляция сохраняет шаг, а представление скрывает дробный прогресс. |
| Восстановление после сильной остановки | Ограниченная политика догоняющих шагов | Один плохой кадр не должен создавать бесконечную работу. |
# Используйте повторяемый процесс настройки
Начните без скачков и убедитесь, что оба пути совпадают. Добавьте повторяемый hitch, затем измените его частоту и проверьте, накапливается ли видимая ошибка или стабилизируется. Настройте фиксированный шаг и посмотрите число догоняющих операций до изменения скорости. Наконец включите предел и сравните переменное модельное время с реальным. Так причина расхождения отделяется от политики, которая его ограничивает.
Чего этот эксперимент не доказывает
Лаборатория использует заданные длительности кадров и постоянную скорость. Она объясняет поведение времени, но не измеряет устройство и не подтверждает игровой движок. Реальная физика, опрос ввода, сеть, интерполяция и бюджет кадра могут изменить лучший дизайн. Используйте результат как гипотезу и проверьте её в настоящей игре.