在 Twine/Harlowe 中,使用 (link:) 宏会导致链接点击后立即从页面中移除;若需多次触发同一交互(如反复弹出提示),应改用 (link-rerun:) 宏——它保留链接并重新执行其内容。
在 twine/harlowe 中,使用 `(link:)` 宏会导致链接点击后立即从页面中移除;若需多次触发同一交互(如反复弹出提示),应改用 `(link-rerun:)` 宏——它保留链接并重新执行其内容。
默认情况下,Harlowe 的 (link:) 宏设计为“一次性”交互:用户点击后,宏所在的文本节点会被替换(通常为空),从而造成“链接消失”的现象。这并非 Bug,而是其语义所决定的行为——(link:) 表示“跳转或触发一次动作后退出当前上下文”。但许多交互式叙事场景(如检查物品、重复对话、调试测试)需要持久可点击的按钮式链接,此时应选用语义更匹配的 (link-rerun:)。
✅ 正确写法(链接常驻,可无限点击):
Thing (link-rerun: "Look at")[(alert: ["It's a thing"], "Sure.")]
⚠️ 注意事项:
(set: $clicks to it + 1)You've clicked this $(clicks) time(s). (link-rerun: "Click again")[...]
总结:当需要“点击即响应、响应后仍可用”的交互时,(link-rerun:) 是 Harlowe 提供的标准解决方案。理解各链接宏的语义差异(link → 一次性 / link-rerun → 可重入 / link-goto → 导航保留),是构建稳定、可维护 Twine 故事的关键基础。