← Урок: игровой цикл/Лаба: цикл вживую
EN
Lab · потрогать руками

Игровой цикл вживую

Три объекта едут с одной и той же заданной скоростью — но тремя стратегиями обновления. Опускай FPS рендера, крути частоту симуляции, включай интерполяцию, жми «просадку» — и смотри, кто рассинхронится, кто задёргается, а кто сорвётся в спираль смерти.
🏠 эксперимент~10 мин
Как пользоваться
Все три точки должны ехать со скоростью 240 px/с. 🔴 привязка к кадру (x += v за кадр, калибровано под 60 FPS), 🟡 ×dt (x += v·dt), 🟢 фикс-шаг + интерполяция. Опусти FPS рендера до 15 — красный поедет вчетверо медленнее. Подними sim-частоту над FPS и выключи интерполяцию — зелёный задёргается. Жми «просадку кадра» с выключенным clamp — увидишь спираль (десятки шагов за кадр) и как жёлтый телепортируется сквозь стену.
🔴 привязка к кадру 🟡 x += v·dt 🟢 фикс-шаг + интерп аккумулятор
Что заметить: 1) опусти FPS до 15 — 🔴 ползёт ~60 px/с (скорость = FPS×шаг), 🟡 и 🟢 держат 240 (кадронезависимы). 2) sim = 10 Гц, FPS = 60, интерполяция выкл — 🟢 дёргается (обновляется 10 раз/с); включи — снова гладко. 3) clamp выкл + «просадка»: шагов за кадр подскакивает до десятков (спираль), 🟡 прыгает сквозь стену (туннелирование на большом dt). С clamp — 🟢 уходит в slow-mo без спирали.
🏠 Что дальше
Вернись в урок, блок «🔧 Запусти и поковыряй»: положи движение в Godot _physics_process vs _process, сними V-Sync — и увидишь ровно это на настоящем движке.
Связи
из урока
Игровой цикл и fixed timestep — теория: аккумулятор, n = ⌊a/dt⌋, интерполяция α = a/dt, спираль смерти и clamp.
пример
Doom — фиксированные 35 тиков/сек: ровно зелёная стратегия, исторически.
Что заметить по итогу (чеклист наблюдений)