ci / release (push) Successful in 5m5s
ci-platforms / build (amd64, windows, windows-2022) (push) Skipped
ci-platforms / build (arm64, darwin, macos-15) (push) Skipped
ci-platforms / build (amd64, darwin, macos-15-intel) (push) Skipped
ci / checks (push) Successful in 4m41s
ci / build (amd64, linux, ubuntu-24.04) (push) Successful in 7m14s
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.
59 lines
4.5 KiB
Markdown
59 lines
4.5 KiB
Markdown
---
|
|
id: time
|
|
title: Время
|
|
---
|
|
# Время
|
|
|
|

|
|
|
|
У каждой запущенной игры свои часы. Пауза, шаги и масштаб времени меняют их скорость, а каждый вид кода читает подходящее ему время.
|
|
|
|
| Время | Что это |
|
|
|---|---|
|
|
| Реальное | время по часам между кадрами, урезанное до `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)` — фиксированные шаги.
|