Skip to content

基础对话:AShell、ADialog 与 ALine

最简的故事只需要一个对话,里面有一行文字。让我们从一个“你好,世界!”开始。

html
<AShell>
  <ADialog>
    <ALine>你好,世界!</ALine>
  </ADialog>
</AShell>

当你保存并运行这段代码时,ADVMaker 会自动:

  1. ADialog 分配一个唯一的 ID(如 __DIALOG&NUM1)。
  2. ALine 的内容打包为一个虚拟节点(VNode),放入对话的脚本数组中。
  3. 在全部组件挂载完成后,调用 Adv.appendDialog 将这个对话注册到游戏引擎。

你完全不需要手动管理 ID 或调用 API。随着故事增长,这种声明式写法会让你节省大量精力。

多行对话

ADialog 中可以放置任意数量的 ALine,它们会按照书写顺序依次呈现给玩家:

html
<ADialog>
  <ALine>勇者推开了古老的大门。</ALine>
  <ALine>灰尘在阳光中飞舞,空气中弥漫着陈旧的味道。</ALine>
</ADialog>

在引擎内部,这两行对话会被打包成 VNode[],并作为当前对话的 script 发送。玩家需要逐一点击才能看到下一句,完全符合经典文字冒险的节奏。

自动推断 next

最令人称道的一点是,你通常不需要手动指定对话之间的跳转。组件会根据它们在模板中的出现顺序,自动计算 next 属性。例如:

html
<ADialog id="d1">
  <ALine>第一段</ALine>
</ADialog>
<ADialog id="d2">
  <ALine>第二段</ALine>
</ADialog>

这里 d1next 会自动设为 "d2",而 d2next 则为 null(表示故事暂时停顿)。你仍然可以手动指定 next 来覆盖这一行为,这会在后续小节详细介绍。

注意:所有故事组件都必须嵌套在 <AShell> 内部,否则它们无法正常工作。AShell 是整个故事的注册中心和调度器。