docs(10-11): 用户修订循环 batch3(基础/其他 + 高级教程预留)

- U-01 src-tour:content 层主要在编辑器内改、对应初级教程
- U-02 data-state-overview:解释 state 静态类型按 L0-L3 逐层累加
- U-04 map-structure:按 alias/zIndex 取指定图层(非 addLayer)
- U-05 map-tiles:putMapData/getMapData 完整示例 + 高级教程预留
- U-06 flags:区分字段对象与字段值,两组接口如何选择
- U-20 events:以内置事件集已完整(发布前约 100 个)视角改写
- U-21 replay-commands:录像指令细节留高级教程
- U-22 11 篇:高级教程显式说明 + 非链接预留标记
This commit is contained in:
AncTe committed 2026-10-18 14:45:00 +08:00
1 parent 5c77676bca
commit 687e248ac1
15 files changed
+174 -24

No files matched your search

+25 -2
View File
@@ -2,9 +2,32 @@
有些状态要跨事件、跨楼层一直保留,还要跟着存档走——比如「Boss 是否已被击败」「这道门开过没有」「某处计数到了几」。这些状态放哪?Flag 系统(`state.flags`)就是数据端提供的**全局可存档变量**:任何需要跨事件、跨楼层保留的简单状态,都可以存进 Flag,它会随存档一起保存与恢复。
## 字段
## 字段与字段值
Flag 中的每一项是一个**字段**(`IFlagCommonField`),字段名与值一一对应。字段对象提供 `set(value)`(设置值)、`add(value)`(对数字值增减)与 `get()`(取值)。一般不需要直接操作字段对象,用下面的系统接口即可。
Flag 里的每一项都对应一个**字段**(`IFlagCommonField`)。要读懂下面的接口清单,先分清两个概念:
- **字段**是一个**对象**,代表「这个变量本身」,提供 `get()`(取值)、`set(value)`(设置值)、`add(value)`(对数字值增减)等方法;
- **字段值**就是字段里存的**那个普通值**(数字、字符串、布尔等)。你平时读写的,大多是字段值。
系统接口因此分成两组,看名字就能分辨:
- **返回或操作「字段」(对象)**的:`setField` / `getField` / `getOrInsert` / `getOrInsertComputed`——它们返回字段对象本身;
- **直接操作「字段值」**的:`setFieldValue` / `addFieldValue` / `getFieldValue` / `getFieldValueDefaults`——只关心值,不暴露字段对象。
怎么选?**只读写一次值**时用「值」那组更简单,不必多一步 `get()`;**要多次操作同一个字段、或要复用字段对象**(例如先拿到字段、再反复增减)时,用「字段对象」那组更省事。两者可以互相转换:
```ts
// 用「字段值」的写法:一次设置、一次增减
state.flags.setFieldValue('open-count', 0);
state.flags.addFieldValue('open-count', 1);
// 用「字段对象」的写法:拿到字段后反复操作
const field = state.flags.getOrInsert('open-count', 0);
field.add(1);
const value = field.get();
```
其实「值」那组就是对「字段对象」那组的简写:`setFieldValue(name, v)` 等价于 `getField(name)?.set(v)`,`getFieldValue(name)` 等价于 `getField(name)?.get()`,`addFieldValue(name, v)` 等价于 `getField(name)?.add(v)`,`getFieldValueDefaults(name, d)` 等价于 `getOrInsert(name, d).get()`。
## 全部接口