clock游戏/帧生命周期

与 Roblox 这类事件驱动脚本不同,All Out 上的游戏使用帧生命周期模型,允许你在游戏开始时、每一帧以及会话结束时运行代码。

所有 Out 游戏都运行在一个简单的生命周期上:有些回调在启动时只发生一次,有些则每帧都会发生。

你将通过以下任一方式实现这些回调:

  • 全局 (顶层 ao_* 过程,位于 main.csl),或者

  • 在组件上 (类似于 ao_update 内部的 Player 或你自己的 Component 子类)

circle-info

如果你在寻找“模板” main.csl,请参见 CSL 入门.

全局生命周期(整个场景范围)

这些是位于其中的顶层过程 main.csl:

ao_before_scene_load

在场景创建之前运行。通常你会在这里注册“全局定义”:

  • 物品定义(背包系统)

  • 货币(经济系统)

  • 全局配置值/常量

ao_start

在场景开始时运行一次。

常见用途:

  • 生成运行时实体/预制体

  • 初始化全局系统

  • 读取全局游戏存档数据

ao_update(dt)

每帧运行。

常见用途:

  • 游戏计时器、波次管理器

  • 依赖时间的生成逻辑

  • 服务器权威的游戏规则

ao_late_update(dt)

在之后每帧运行 ao_update.

常见用途:

  • 依赖于本帧最终位置/状态的 UI

  • 更新后的“清理”工作

组件生命周期(每个实体)

组件(包括 Player)可以实现:

  • ao_start()

  • ao_update(dt)

  • ao_late_update(dt)

  • ao_end()

  • ao_on_state_sync() (在网络状态同步时调用)

示例:

代码放在哪里:经验法则

  • 每个玩家的状态/逻辑:放在 Player (见 添加玩家逻辑)

  • 可复用的实体行为:放在自定义组件上(参见 实体和组件)

  • 全局协调 / 规则:放在全局生命周期中(ao_* 过程)

服务器 vs 本地

All Out 会自动将游戏状态从服务器同步到客户端,但你仍然希望把 仅外观的 工作保留在本地。

使用:

  • this->is_local_or_server() 用于游戏 UI + 输入处理(在服务器 + 本地客户端上运行)

  • this->is_local() 用于外观 UI/特效(仅在本地客户端上运行)

这些是 Player_Base上的方法。可在玩家引用上调用它们,或者作为 is_local_or_server() / is_local() 在一个 Player 方法中(隐式 this).

最后更新于