The remaining editor strings and undo step names; component, field, enum, setting, diagnostic and Script API texts under schema.*, enum.*, setting.*, diag.* and api.*; the launcher, the in-game Settings View with a Language setting, the CLI and aego schema show --lang. Every documentation page has a .ru.md translation; the site has a full Russian tree with hreflang, a language switch and ru/llms.txt; aego docs check --lang ru. New doc.tutorial and doc.recipe icons. Fix: an animator restored by a rewind prepares its controller before the replayed step.
4.5 KiB
id, title
| id | title |
|---|---|
| time | Время |
Время
У каждой запущенной игры свои часы. Пауза, шаги и масштаб времени меняют их скорость, а каждый вид кода читает подходящее ему время.
| Время | Что это |
|---|---|
| Реальное | время по часам между кадрами, урезанное до maxFrameDelta (по умолчанию 0,1 с), чтобы зависший кадр или свёрнутое окно не дали огромного шага |
| Игровое | реальное × масштаб времени; 0 на паузе. Его читают time.Delta() и time.Elapsed(). |
| Фиксированное | постоянный шаг, fixedHz (по умолчанию 60). Каждый полный шаг запускает FixedUpdate и физику. За кадр выполняется не больше maxFixedSteps (4) шагов; остальные отбрасываются, и профилировщик считает их отброшенными тиками. |
| Редактора | собственное время редактора; оно не встаёт на паузу вместе с игрой |
Каждый мир считает свои кадры и фиксированные шаги. time.Frame() и time.Tick() возвращают те же числа, что показывают профилировщик и «Монитор событий».
Пауза, шаг и масштаб
- Пауза останавливает игровое и фиксированное время. Отрисовка, оверлеи и редактор продолжают работать.
- Шаг на кадр выполняет один Update и те фиксированные шаги, что накопились для этого кадра: ноль или один.
- Шаг на фиксированный тик выполняет ровно один фиксированный шаг (FixedUpdate, физику, события столкновений) без Update.
- Масштаб времени от 0 до 8 задаёт, сколько игрового времени проходит за реальную секунду. Длина фиксированного шага не меняется, поэтому при 0,25 физика ведёт себя так же, как при 1, только медленнее.
Время на паузе не накапливается: после долгой паузы игра продолжается одним обычным кадром.
Настройки проекта
Блок engine в project.aego задаёт пределы. Отсутствующее поле сохраняет значение по умолчанию.
engine {
fixedHz=60.0
maxFrameDelta=0.1
maxFixedSteps=4
}
Системы
Система на Go выбирает, что делать на паузе, полем Pause в своём SystemDesc: PauseNormal (останавливается), PauseAlways (работает каждый кадр) или PauseWhenPaused (работает только на паузе). Режим паузы действует на фазы fixed и update; ввод и отрисовка работают всегда.
Скрипты
@pause("always")
script PauseMenu {
func Update(dt float) {
if input.KeyPressed(input.KeyEscape) {
time.SetPaused(!time.IsPaused())
}
}
}
@pause("normal")(по умолчанию): Update останавливается на паузе.@pause("always"): Update выполняется каждый кадр, на паузе и без неё, аdt— реальное время. Используйте это для меню и HUD.@pause("whenPaused"): Update выполняется только на паузе.
FixedUpdate всегда идёт по фиксированным шагам. yield wait(s) считает игровые секунды и стоит на паузе; yield waitUnscaled(s) считает реальные секунды и продолжает идти на паузе. frames(n) считает игровые кадры, fixed(n) — фиксированные шаги.
