高级技巧
手动指定 next
虽然自动推断已经覆盖了绝大多数场景,你仍然可以通过 next 属性精确控制跳转。该属性在 AScene 和 ADialog 上均可用,且优先级高于自动推断。
html
<ADialog id="d1" next="secret_room">
<ALine>你发现了一扇隐藏的门。</ALine>
</ADialog>
<ADialog id="secret_room">
<ALine>这是你从未见过的密室。</ALine>
</ADialog>
<ADialog id="d2">
<ALine>你继续沿着走廊前进。</ALine>
</ADialog>这里 d1 显式指定了 next 为 "secret_room",跳过了紧接着的 d2。secret_room 没有指定 next,因此自动推断为 "d2"。这种混合使用让你可以在需要时灵活跳转,而在大部分地方享受自动编排的便利。
传递 null 终止跳转
如果你希望某个对话或场景之后不再自动进入下一个,可以将 next 显式设为 null:
html
<ADialog id="open_end" :next="null">
<ALine>故事在这里暂告一段落……</ALine>
</ADialog>嵌套与组合
故事组件可以自由嵌套,只要遵循正确的父子关系。例如,你可以在一个 ADialog 中同时包含普通 ALine 和 AOptions,它们会按照书写顺序呈现:
html
<ADialog>
<ALine>你遇到了一个商人。</ALine>
<ALine>他向你展示了两件商品。</ALine>
<AOptions>
<AOption>...</AOption>
<AOption>...</AOption>
</AOptions>
<ALine>商人微笑着收起了货物。</ALine> <!-- 这行会在选项之后显示吗? -->
</ADialog>需要注意的是,选项列表被视为一个整体内容项。玩家必须先做出选择(并播放选项内部的反馈台词),之后才会继续执行 AOptions 后面的 ALine。这种设计符合文字冒险“选择-反馈-继续”的典型流程。
与手动 API 混用
故事组件完全基于底层的 Adv API。理论上你可以在同一个故事中同时使用组件和手动 API 调用,但强烈不建议这样做,因为组件的自动推断可能会与手动注册产生冲突。坚持一种风格,会让你的故事更易于维护。