状态与数据
属性与状态
把可保存状态、派生结果、规则和表现分开设计。
状态与数据
只保存事实,不保存能重新计算的结果
属性保存金币、体力、章节、次数等权威状态。派生值交给组合属性,规则交给脚本,页面只读取快照。
# 状态契约
创建属性前回答:
| 问题 | 示例 |
|---|---|
| 它代表什么事实? | 当前体力 |
| 单位和类型? | 整数点数 |
| 初始值与范围? | 10,范围 0…10 |
| 谁能修改? | 探索和休息脚本 |
| 何时保存? | 每次动作后进入玩家存档 |
| 玩家如何看到? | 顶部状态栏与按钮禁用原因 |
名称不是充分契约。相同“时间”可能表示 Unix 时间、游戏秒数或倒计时剩余值。
# 四层分工
| 层 | 示例 | 规则 |
|---|---|---|
| 保存状态 | 当前体力、章节、当前位置 | 属性或动态字符串 |
| 派生状态 | 最大体力、战力、完成率 | 组合属性或只读脚本 |
| 状态变化 | 探索消耗、休息恢复 | 控件/事件脚本 |
| 状态表现 | 数字、进度条、禁用样式 | 渲染布局与特效 |
不要同时保存“当前生命、最大生命、生命百分比”和另一份页面缓存,除非每项都是独立业务事实。
# 纯 AI 实现流程
- 让 AI 查询同义属性和引用,先复用。
- 给出 ID 语义、初始值、范围和唯一写入入口。
- 让规则脚本使用
player.getPro、setPro或addPro。 - 让渲染布局只读快照,禁止在渲染时写状态。
- 用调试存档测试边界和恢复。
提示词示例:
建立“体力”状态:初始 10,整数,范围 0..10。
只有探索脚本可扣除 2,休息脚本可恢复 4。
页面显示当前值/上限;不足时动作失败且不部分结算。
先查询现有属性和控件,不要猜 ID。
# 传统字段边界
打开传统模式文档后,可维护名称、别名、分类、图标、单位、默认值、上下限、自动增长和传统显示样式。脚本引用稳定 ID;改名、复制、导入和模块迁移后必须检查引用。
自动增长、公式和属性转化是传统配置手段,它们不能与脚本重复结算同一变化。
# 特殊状态
当前时间、真实离线时间、累计时间和随机值有各自读取语义,通常不是可任意覆盖的普通存档属性。需要多份同结构状态时使用类与对象;需要多行记录时使用表格。
# 验收
测试默认值、零值、上下限、非法数值、连续写入、重复动作、刷新、读取旧存档和离线回来。页面显示必须与 player.getPro 的权威值一致。
下一步:组合属性。