# 事实与表现：让重复、逆序和恢复都成立

不先造复杂任务系统，先让编号、登记台、出口与返回流程始终表达同一个真实进度。

讲解与示意图为本站原创教学。配音为本机离线中文合成语音，不是原演讲者声音。

## 1. 不要让三个物件各自猜任务进度

保存事实，再从事实生成一致表现。

同一个完成条件如果分别藏在登记台文字、出口颜色和动画次数里，很容易出现这里说完成、那里还说缺项。值守区练习只需要先区分两项事实：有没有获得编号，是否已经核验。登记台和出口都根据它们显示反馈，而不是各自保存一份相互无关的答案。图中最初两项都为否，玩家仍能探索，不能确认完成。暂时不增加任务编辑器，先用纸面事实卡把这套关系讲清楚。

## 2. 先拿证据，是有效顺序，不是违规操作

教学顺序，不等于隐藏的程序前置条件。

现在编号已经获得，核验还没完成。登记台因此允许执行动作，出口仍说明缺项，这并不矛盾。即使玩家没先看出口清单，这个状态也应有效，因为编号本来就在那里。若程序要求先读清单再调查编号，相当于凭空增加了隐藏依赖。玩家提前发现线索后可能以为已经调查过，永远不会再点第二遍。把真正必要的条件写出来，就能分清哪些先后关系属于理解引导，哪些才属于规则。

## 3. 成功后的第二次调查，不能撤销第一次成果

重复应给稳定反馈，不再次消耗或回退。

核验完成后，有人会再按一次调查键，确认刚才发生了什么。这不是需要惩罚的操作。登记台可以回复已经登记，出口继续显示完成，但不应把核验值反转回未完成，也不应重复扣除物品。本练习没有消耗品，因此更容易看清原则。即使成功动画只播一次，离场回来后也要能从文字读出当前结果。检验重复行为，就是检查系统是否真的记住事实，而不是碰巧播放过一段演出。

## 4. 离场之后，远处对象仍要读到同一事实

对象重建，不意味着玩家的进度重来。

图里上游操作改变了下游结果。实现时，下游房间可能直到玩家进入才创建；它不能只等一条早已错过的动画通知，而应在出现时读取当前事实。Godot 可以用已有的共享运行时数据承载这些信息，具体结构沿用项目约定即可。还要区分两个范围：普通换房间保留进度，不代表关闭程序后也会保留。后者需要明确的保存恢复设计，不能因为使用了自动加载节点就宣布已经有存档。

## 5. 地图记号是认知记录，不是任务开关

去过、找到证据和解决目标不能混成一项。

看图中的问号：玩家从支路取得新线索，原目标仍未核验，所以未解记号不该自动变成完成。若允许玩家自己做记号，那更只是他的判断；即使误标完成，也不能让程序直接开门。对自动生成的任务记录，则应从真实事实推导结果。这两种记事方式用途不同，不必强行统一。值守区中，获得编号之后仍要回登记台行动，最后去出口确认，认知变化不能偷偷替代实际动作。

## 6. 暂停：局部恢复，该重置哪些东西？

恢复范围写清楚，避免一半复位、一半残留。

这页用一个独立推箱子模型说明恢复范围，并不要求给交接练习增加箱子。箱子堵住唯一通道时，局部重置应把它恢复到可解位置，同时确保角色没有留在碰撞里面。已经取得、与这道箱子题无关的证据，不该顺手全部清空。另一种重开整个练习则可以明确清空本轮事实，两者都能成立，关键是名字和结果一致。现在选择局部重置最符合玩家预期的行为。

### 暂停思考
按钮明确叫作“重置本处箱子”，哪种行为最合理？
A. 箱子复位，同时随机取消一项已完成登记
B. 箱子和安全站位恢复，保留无关证据事实
C. 只重播箱子动画，不改变堵路的实际碰撞
答案：B。恢复应覆盖造成受困的真实对象和必要安全站位，不扩大到无关进展；表现变化不能代替真实状态恢复。

## 7. 五条路径，检查五种不同的失败原因

作者通关一次，只覆盖了他习惯的一条顺序。

把测试拆成五类，目的不是凑检查数量。常规路线检查基本闭环，逆序检查隐藏前置条件，离场检查事实是否被房间删除，重复检查是否意外回退，重试检查恢复边界和角色控制。值守区可以规定普通返回保留两项事实，重开练习清空它们，并回到安全起点。分别在登记前后重开，看看出口、登记台和可操作状态是否一致。这些只是本轮范围，不是所有未来状态的穷尽证明。

## 8. 独立练习：把“应该”变成可核对的结果

断言、实际操作和证据，三者分开记录。

写一张表，每行包含给定事实、操作和预期结果。例如编号已取得但尚未核验，离场再回来后，登记仍应可执行；核验已完成，重复调查后，出口仍应显示完成。再补上重开前后的安全落点和控制恢复。逐行实际执行，把结果与截图或日志位置记在旁边。还没进入引擎时可以做纸面推演，但应明确标记，不把写出预期当作运行通过。最后保留一个失败案例和修订后的复测结果。

## 参考资料

- [Godot stable · Singletons (Autoload)](https://docs.godotengine.org/en/stable/tutorials/scripting/singletons_autoload.html)：核对正文：Autoload 可在换场景时保留共享运行时信息，不自动等于退出程序后的磁盘存档。事实表与交接规则是原创设计，不要求额外建设全局框架。
- [Godot stable · Saving games](https://docs.godotengine.org/en/stable/tutorials/io/saving_games.html)：核对正文关于先确定持久对象与数据、再保存和恢复的职责。本课只定义练习恢复边界，不复制文档存档实现，也不声称网页练习是引擎存档。
