For the complete documentation index, see llms.txt. This page is also available as Markdown.

Жизненный цикл игры/кадра

В отличие от сценариев, основанных на событиях, как в Roblox, игры в All Out используют модель жизненного цикла кадров, которая позволяет запускать код при старте игры, на каждом кадре и в конце сессии.

Игры All Out работают по простому жизненному циклу: некоторые колбэки вызываются один раз при запуске, а некоторые — каждый кадр.

Эти колбэки вы реализуете либо:

  • Глобально (на верхнем уровне ao_* процедурах в main.csl), или

  • На компонентах (методы вроде ao_update этого игрока Player или ваших собственных Component подклассов)

Если вы ищете «шаблон» main.csl, см. Начало работы с CSL.

Глобальный жизненный цикл (для всей сцены)

Это процедуры верхнего уровня в main.csl:

ao_before_scene_load

Запускается после того, как пустой Сцена создаётся, но до загрузки его сериализованных сущностей и компонентов. Здесь обычно регистрируют определения, необходимые во время загрузки сцены:

  • Определения предметов (система инвентаря)

  • Валюты (экономическая система)

  • Глобальные значения/константы конфигурации

ao_start

Запускается один раз при старте сцены.

Типичные случаи использования:

  • Создание сущностей/префабов во время выполнения

  • Инициализация глобальных систем

  • Чтение общих данных сохранения игры

ao_update(dt)

Запускается каждый кадр.

Типичные случаи использования:

  • Игровые таймеры, менеджеры волн

  • Логика спавна, зависящая от времени

  • Правила геймплея

ao_late_update(dt)

Запускается каждый кадр после ao_update.

Типичные случаи использования:

  • Работа на уровне всей сцены, зависящая от итоговых позиций/состояния кадра

  • Работа по «очистке» после обновлений

Интерфейс игрока должен находиться в Player.ao_late_update, а не в этом глобальном колбэке.

Жизненный цикл компонента (для каждой сущности)

Компоненты (включая Player) могут реализовывать:

  • ao_start()

  • ao_update(dt)

  • ao_late_update(dt)

  • ao_end()

  • ao_on_state_sync() (вызывается, когда сетевое состояние синхронизировано)

Пример:

Куда помещать код: правило большого пальца

  • Состояние/логика для каждого игрока: размещайте это на Player (см. Добавление логики игрока)

  • Повторно используемое поведение сущностей: размещайте их в пользовательских компонентах (см. Сущности и компоненты)

  • Глобальная координация / правила: размещайте это в глобальном жизненном цикле (ao_* процедуры)

Сервер vs локально

Глобальные и компонентные игровые колбэки выполняются и на предсказывающем клиенте, и на сервере. Не защищайте игровой процесс с помощью Game.is_server().

Рисуйте весь UI игрока из ao_late_update стека вызовов, обёрнутых в is_local_or_server(). Используйте is_local() только для визуальных переопределений, специфичных для игрока. Состояние, изменённое только под is_local() заменяется следующей серверной синхронизацией.

Это методы в Player_Base. Вызывайте их у ссылки на игрока или как is_local_or_server() / is_local() внутри Player метода (неявно this).

Последнее обновление