Lab · потрогать руками
Игровой цикл вживую
Три объекта едут с одной и той же заданной скоростью — но тремя стратегиями обновления. Опускай FPS рендера, крути частоту симуляции, включай интерполяцию, жми «просадку» — и смотри, кто рассинхронится, кто задёргается, а кто сорвётся в спираль смерти.
Как пользоваться
Все три точки должны ехать со скоростью 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 тиков/сек: ровно зелёная стратегия, исторически.
Что заметить по итогу (чеклист наблюдений)
- На 15 FPS 🔴 замедлился, а 🟡/🟢 держат скорость — кадронезависимость глазами.
- sim < FPS без интерполяции → 🟢 дёргается; с интерполяцией → гладко.
- «Просадка» без clamp → десятки шагов за кадр (спираль) и телепорт 🟡.
- «Просадка» с clamp → 🟢 в slow-mo, аккумулятор не переполняется.