block-quote На этой страницеchevron-down
GitBook Assistant Спросить chevron-down Скриптинг clock Жизненный цикл игры/кадраВ отличие от событийно-ориентированного скриптинга, как в Roblox, игры в All Out используют модель жизненного цикла кадров, которая позволяет запускать код при старте игры, на каждом кадре и в конце сессии.
Все игры All Out работают по простому жизненному циклу: некоторые колбэки вызываются один раз при запуске, а некоторые — каждый кадр.
Вы реализуете эти колбэки либо:
Глобально (на верхнем уровне ao_* процедуры в main.csl), либо
На компонентах (методы вроде ao_update внутри Player или ваших собственных Компонент подклассов)
Глобальный жизненный цикл (для всей сцены)
Это процедуры верхнего уровня в main.csl:
ao_before_scene_load
Выполняется до создания сцены. Именно здесь обычно регистрируют «глобальные определения»:
Определения предметов (система инвентаря)
Валюты (экономическая система)
Глобальные значения конфигурации / константы
Выполняется один раз при запуске сцены.
Обычно используется для:
Создания сущностей/префабов во время выполнения
Инициализации глобальных систем
Чтения сохранённых данных для всей игры
Выполняется каждый кадр.
Обычно используется для:
Игровые таймеры, менеджеры волн
Логика спавна, зависящая от времени
Игровые правила, авторитетные на сервере
ao_late_update(dt)
Выполняется каждый кадр после ao_update.
Обычно используется для:
UI, который зависит от финальных позиций/состояния на кадр
Работа по «очистке» после обновлений
Жизненный цикл компонента (для каждой сущности)
Компоненты (включая Player) могут реализовывать:
ao_on_state_sync() (вызывается, когда сетевое состояние синхронизируется)
Пример:
Куда помещать код: правило-ориентир
Поведение сущностей, которое можно переиспользовать : поместите это в пользовательские компоненты (см. Сущности и компоненты )
Глобальная координация / правила : поместите это в глобальный жизненный цикл (ao_* процедуры)
Сервер vs локально
All Out автоматически синхронизирует игровое состояние с сервера на клиенты, но вам всё равно стоит оставлять только косметическую работу локальной.
Используйте:
this->is_local_or_server() для игрового UI + обработки ввода (работает на сервере + локальном клиенте)
this->is_local() для косметического UI/эффектов (работает только на локальном клиенте)
Это методы у Player_Base. Вызывайте их на ссылке на игрока или как is_local_or_server() / is_local() внутри Player метода (неявно) this).
Последнее обновление 23 дня назад