terminal语言基础

就这些文档而言,我们将 CSL 及其运行时/平台等同指代

本页是 CSL 的“数据建模”部分:原始类型、结构体/类,以及用于清晰表示游戏状态的模式。

circle-info

如果你是新手,先从 CSL 入门开始。本页假设你已经知道如何声明变量并编写 过程/方法.

原始类型

数字和布尔值

  • 有符号整数: s8, s16, s32, s64 (别名: int == s64)

  • 无符号整数: u8, u16, u32, u64 (别名: uint == u64)

  • 浮点数: f32 (别名: float), f64

  • 布尔值: b8 (别名: bool), b16, b32, b64

health: int = 100;
speed: float = 6.5;
is_dead: bool = false;

字符串

string 经常用于 ID、名称和格式化。

item_id := "sword";
log_info("picked up %", {item_id});

向量

v2, v3, v4 是内置的数学/数据类型:

枚举

枚举非常适合用于可读的“模式/状态”字段:

circle-info

当编译器能够推断枚举类型时,枚举值通常用简写引用 .VALUE

结构体(值类型)

把结构体用于你想要低成本复制的“纯数据”(配置、小型状态块、描述符)。

何时使用结构体

  • 描述符/配置对象(*_Desc)

  • 小型、独立的状态,希望按值复制

  • 你希望嵌入到另一种类型中的数据

何时不使用结构体

  • 跨多个系统共享的大型可变状态(使用类)

  • “身份”对象(玩家、物品、长生命周期对象)(使用类)

类(引用类型)

类是引用类型。使用 new(...).

继承

你可以从其他结构体/类继承:

circle-exclamation

数组、切片和动态数组

你会看到三种常见形式:

  • 固定数组: [N]T (编译期大小)

  • 切片 / 管理数组: []T (数组的一个视图)

  • 动态数组: [..]T (可调整大小的列表)

示例:

完整指南请参见 数组和集合.

按引用传递(ref)

如果过程需要修改值,请使用 ref:

这对于那种会逐步裁剪/缩小矩形的“布局式” API 尤其有用:

类型转换

使用 expr.(T):

类型多态(泛型风格的过程)

CSL 支持使用 $ 在调用处推导类型:

作为值的类型(typeid)

typeid 是在运行时和/或用于多态调用时表示类型的值:

实用建模指南

  • 每个玩家的状态保存在 Player. 如果它应该因玩家而异,就不应该是全局的。

  • 描述符优先使用小型结构体 并将运行时状态存储在类/组件中。

  • 保持服务器权威数据具有权威性。 如果它会影响游戏玩法,就不要只在客户端计算它。

有关玩家特定模式,请参见 添加玩家逻辑。关于世界的 ECS 部分,请参见 实体和组件.

最后更新于