Skip to content

Flag & Jump

flag 标志是一些特殊的脚本节点,在控制流中起到跳转锚点的作用。

在剧本中,可以通过 jump 指令跳转到指定标志位(能跨越文件!)。

flag("start"); // 指令 1
me `unlimited loop work` // 指令 2(语段)
SomeBody.enter(); // 指令 2(语段)
jump("start"); // 指令 3

在上面的示例中,jump 指令会跳转到 flag("start") 所在的语段。

完整的执行顺序如下:

  1. 执行 flag 指令(什么事都没有发生)

    由于 flag 是一个不阻塞的指令,因此自动执行下一个指令。

  2. 执行语段(播放文字和动画)

    由于语段是阻塞的指令,因此暂停执行,等待玩家按下鼠标。

  3. 执行 jump 指令

    跳转到 flag("start") 位置,并继续执行,直到遇到语段。

一个更容易理解的示例如下:

flag("start1");
flag("start2");
flag("start3");
flag("start4");
flag("start5");
me`unlimited loop work`;
SomeBody.enter();
jump("start1");

每次点击鼠标后,总是执行一次语段,并在语段处停下,等待下一次鼠标按下。

看看如何更方便的编写剧本。

有些时候,为了更好的排布剧本,我们可以把 flag 以及其后的部分设计成一个单独的“模块”。

some-module.ts
flag("before dead"); // 跳转进入
me.enter();
// ...
jump("alive"); // 跳转到外部

有时,我们会将大量的语句混在一起,而无法清晰的分割,考虑利用缩进来提高代码的可读性。

对每个逻辑段落使用 {} 包裹,并记得使用 flagjump 来控制流。

flag("before dead");
{
me.enter();
// ...
jump("alive");
}
flag("before alive");
{
me.enter();
// ...
jump("say something");
}