Skip to content

高级技巧

手动指定 next

虽然自动推断已经覆盖了绝大多数场景,你仍然可以通过 next 属性精确控制跳转。该属性在 ASceneADialog 上均可用,且优先级高于自动推断。

xml
<ADialog id="d1" next="secret_room">
    <ALine>你发现了一扇隐藏的门。</ALine>
</ADialog>
<ADialog id="d2">
    <ALine>你继续沿着走廊前进。</ALine>
</ADialog>
<ADialog id="secret_room">
    <ALine>这是你从未见过的密室。</ALine>
</ADialog>

这里 d1 显式指定了 next"secret_room",跳过了紧接着的 d2。这种混合使用让你可以在需要时灵活跳转,而在大部分地方享受自动编排的便利。

传递 null 终止跳转

如果你希望某个对话或场景之后不再自动进入下一个,可以将 next 显式设为 null

xml
<ADialog id="open_end" :next="null">
    <ALine>故事在这里暂告一段落……</ALine>
</ADialog>

每次写 :next="null" 还是有些繁琐。ASceneADialogAOption 都支持一个 stop 布尔属性,设上就等同于 :next="null",而且写法更简洁:

xml
<AScene id="scene1" name="起点">
    <ADialog stop>
        <ALine>暂停在这里,无需写 :next="null"</ALine>
    </ADialog>
    <ADialog>
        <ALine>这个对话没有 stop,会自动流转到下一个。</ALine>
    </ADialog>
</AScene>

stop 的优先级高于 next,即使同时写了 next 也会被覆盖为 null

xml
<ADialog id="d1" next="d2" stop>
    <!-- stop 覆盖了 next,故事仍会暂停 -->
    <ALine>虽然写了 next,但 stop 让它暂停。</ALine>
</ADialog>

全局关闭自动推断

如果你发现大多数场景和对话都需要手动指定 next,每次都写 :next="null" 很繁琐,可以在 <AShell> 上设置 auto-next 属性来全局关闭自动推断

xml
<AShell :auto-next="false">
    <!-- 所有 AScene 和 ADialog 的 next 默认都为 null,需手动指定 -->
    <AScene id="start" name="起点">
        <ADialog id="d1">
            <ALine>这段对话结束后,故事会暂停。</ALine>
        </ADialog>
        <ADialog id="d2" next="d3">
            <ALine>我显式指定了 next。</ALine>
        </ADialog>
        <ADialog id="d3">
            <ALine>即使只有一个对话,也不会自动跳转。</ALine>
        </ADialog>
    </AScene>
</AShell>

auto-next 默认为 true(自动推断)。设为 false 后,所有 ASceneADialognext 都会默认为 null,除非你手动指定了 next 属性。对于以手动编排为主的复杂故事,这可以避免大量冗余的 :next="null" 写法。

嵌套与组合

故事组件可以自由嵌套,只要遵循正确的父子关系。例如,你可以在一个 ADialog 中同时包含普通 ALineAOptions,它们会按照书写顺序呈现:

xml
<ADialog>
    <ALine>你遇到了一个商人。</ALine>
    <ALine>他向你展示了两件商品。</ALine>
    <AOptions>
        <AOption>...</AOption>
        <AOption>...</AOption>
    </AOptions>
    <ALine>商人微笑着收起了货物。</ALine>
</ADialog>

需要注意的是,选项列表被视为一个整体内容项。玩家必须先做出选择(并播放选项内部的反馈台词),之后才会继续执行 AOptions 后面的 ALine。这种设计符合文字冒险“选择-反馈-继续”的典型流程。

与手动 API 混用

故事组件完全基于底层的 Adv API。理论上你可以在同一个故事中同时使用组件和手动 API 调用,但强烈不建议这样做,因为组件的自动推断可能会与手动注册产生冲突。坚持一种风格,会让你的故事更易于维护。