# 调查以后，游戏怎样真的记住？

用“调查记录后允许通过出口”理解 Godot 4.x 的节点、信号与状态。采用独立的 record_read 练习，不沿用其他课程的通关事实。先画清调查链，再实现验证，不把图解说成引擎实测。

讲解与示意图为本站原创教学。配音为本机离线中文合成语音，不是原演讲者声音。

## 1. 一张桌子，不应该接管整个游戏

先分清谁知道什么，再决定谁调用谁。

本课用一个独立规则：调查记录之后，练习出口允许通过，不沿用其他课程的通关事实。范围检测知道玩家靠近没有；记录物件提供调查事件与内容；房间控制者处理规则；界面负责显示。节点像不同职责的部件，但不等于一个物件只能对应一个节点，桌子可能含图片、范围与碰撞。我们先画职责，不急着造大框架。本课参照戈多四点七文档，仍需在独立场景验证。

## 2. 靠近，只是成为候选

进入范围不等于玩家已经主动调查。

玩家走进桌边，范围检测可以把桌子加入候选，并显示调查提示。但这时不要立刻记成读过记录。只有按下调查，而且候选仍然有效，才执行调查。离开范围后，应清除候选与提示，否则隔着房间也能点到旧物件。两个物件范围重叠时，还需要明确选谁，例如优先面前且最近的一项。先保证一次输入对应一个对象，再谈漂亮面板；不然文字再精美，也可能显示错内容。

## 3. 信号是通知，不是自动完成任务

发出事件后，要有已连接的接收者处理它。

把信号想成一次通知：记录被调查了，已经连接的接收者执行各自回调。类比到这里就够了；它不是会保存历史、等待听众上线的信箱，也不是后台线程。连接要在事件前准备好，避免编辑器和代码重复接同一处理。调查物不必知道出口的完整节点路径，可以由房间协调。启动时的门状态也要主动刷新，不能等一个还没发生的调查信号来告诉它初始样子。

## 4. 先更新事实，再让反馈读取事实

文字、出口与提示，应该讲同一件事。

接收调查事件后，房间先把记录已经调查这个事实写下来，再根据它更新出口和提示，最后给出可理解的文字。不要让面板自己存一份门已开，门又存一份任务完成，双方很容易不一致。练习把已调查作为通过条件，只是我们定的规则，并不证明玩家真的理解了内容。若正式谜题需要确认理解，应另设有意义的回答或操作。把规则含义说清，比布尔变量取个漂亮名字更重要。

## 5. 暂停：面板关了，事实去哪了？

画面只是事实的一种表现，不是事实本身。

如果唯一的已调查信息，就是面板上显示着已读两个字，关闭面板后会怎样？重新创建的面板可能恢复默认文字，门也可能不知道该不该开。现在暂停，选择更可靠的做法。让事实由确定的状态持有者管理，面板每次打开都读取它。这里并不是要求所有数据都放全局，而是问清谁活得比这块面板更久。文字、动画和按钮都可以重建，不能靠猜它们的外观恢复游戏进度。

### 暂停思考
面板会反复关闭与重建，如何可靠恢复“记录已调查”？
A. 检查新面板是否显示已读文字
B. 向明确的状态持有者读取事实
C. 再发一次调查信号充当存档
答案：B。状态持有者保存事实，界面据此重新呈现。外观不应是进度的唯一来源；补发事件也不能替代存储，还可能触发重复奖励。

## 6. 重复调查可以回看，不应重复发奖

允许重复动作，不等于重复推进。

第一次调查把未调查改成已调查，并执行一次允许通过的变化。第二次调查可以再次显示记录，却不应重复发放奖励或再切一次场景。把这两类行为拆开：内容可回看，首次推进要检查当前事实。然后做一次重置，事实回到未调查时，门与提示也要重新计算。不要靠延迟半秒来压住重复响应；先检查是不是一次输入触发多次，或者同一规则在多个地方各执行了一遍。

## 7. 离开房间，与关闭游戏，是两种保存问题

信号不保存状态，场景变量也不会自动跨场景。

房间被销毁时，它自己的变量通常也随实例消失。若要离开再回来，先让需要保留的事实由切换期间仍存在的对象持有；新房间准备好后，读取事实并恢复门与提示。若连游戏都关闭，还需要另行写入和读取磁盘，内存里的管理对象并不能替代存档。恢复时也不要重播所有历史调查，否则可能再发一次奖励。先恢复当前样子，只有新动作发生时才处理新的事件。

## 8. 动手：用四条路径验收一个调查闭环

不是出现文字就算完成，而是整条反馈链一致。

打开站内调查与状态练习，在独立场景实现这条小规则。测试正常调查、重复调查、先碰出口再调查，以及离开房间后返回四条路径。每次都看文字、门与提示是否一致；没有反应，就沿输入、事件、回调、事实、表现逐段查。记录实际结果和失败步骤，不写笼统的能跑。课中的箭头只是概念演示，四条路径真正运行通过，才是你这个练习的证据，仍不等于正式游戏已完成。

## 参考资料

- [Godot 4.7 官方文档 · Using signals](https://docs.godotengine.org/en/4.7/getting_started/step_by_step/signals.html)：固定 4.7 文档核对连接、回调、自定义信号、emit 与参数。用于现有 Godot 4.x 教学概念，不要求升级，不混入 Godot 3 的字符串式连接示例。
- [Godot 4.7 官方文档 · Scene organization](https://docs.godotengine.org/en/4.7/tutorials/best_practices/scene_organization.html)：核对场景依赖、上层协调与信号作为事件通知的设计建议。房间控制者与已读记录规则为本站原创的小练习，不要求通用全局管理器，也不代表已在用户正式游戏内实现。
