Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

节点中的控制流

Mortar 现在支持在节点内部使用 if/else,用于根据变量、函数或枚举判断来显示不同文本。功能刻意保持轻量——暂不包含循环——以保证脚本可读性。

基本语法

let player_score: Number = 123

node ExampleNode {
    if player_score > 100 {
        text: "满分!"
    } else {
        text: "你还得加把劲。"
    }
}

每个分支都可以包含任意节点语句:文本、赋值、选项甚至嵌套 if。序列化后会被折叠成带 condition 字段的 content 项,游戏端只需解析即可。

支持的表达式

可以比较数字、判断布尔值,也可以调用无参数函数:

if has_map() && current_region == forest {
    text: "你摊开地图,研究下一步的路线。"
}

表达式会被解析成 AST(双目运算、单目运算、标识符或字面量)。当条件依赖游戏端数据时,可通过 fn has_map() -> Bool 由运行时代码来提供结果。

最佳实践

  • 让分支保持短小。若需要完全不同的对话流程,建议跳转到其它节点。
  • 在判断前先更新相关变量,确保条件基于最新状态。
  • 变量系统枚举 搭配使用,可构建稳健的状态机。

后续版本计划引入 while 等语句,但当前的 if/else 已足以覆盖大多数动态文本场景,并保持 Mortar 的简洁特性。