基础对话:AShell、ADialog 与 ALine
最简的故事只需要一个对话,里面有一行文字。让我们从一个“你好,世界!”开始。
html
<AShell>
<ADialog>
<ALine>你好,世界!</ALine>
</ADialog>
</AShell>当你保存并运行这段代码时,ADVMaker 会自动:
- 为
ADialog分配一个唯一的 ID(如__DIALOG&NUM1)。 - 将
ALine的内容打包为一个虚拟节点(VNode),放入对话的脚本数组中。 - 在全部组件挂载完成后,调用
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>这里 d1 的 next 会自动设为 "d2",而 d2 的 next 则为 null(表示故事暂时停顿)。你仍然可以手动指定 next 来覆盖这一行为,这会在后续小节详细介绍。
注意:所有故事组件都必须嵌套在
<AShell>内部,否则它们无法正常工作。AShell是整个故事的注册中心和调度器。