在之前的四个部分中已经基本了解了Ink的语法和功能,这里就个人的理解作一下小结
一、基础内容
- 文本——分为默认/注释/提醒/标签文本,如果没有经过特殊标记,所有默认文本会显示在输出内容中
- 选项——分为用*号标记的一次性选项和用+标记的可重复使用的选项(粘性选择)
2.1. 除了方括号内的内容都会输出
2.2. 选项中的内容是*号到]号之间的内容
2.3. 多个标记符号并列能够组成多选结构
2.4. 通过使用*-> ->DONE可以设置默认选项,是没有选项的选项,当选项全部消失后,会自动进入默认选项(最好设置为粘性选择) - 节点——以两个或以上等号开始,后面接名称部分,其中名称部分至少需要一个字母并且不能有空格,而后面的等号可写可不写,例如=== first_node ===
3.1. 节点通过->符号进行转移
3.2. 节点通过-> DONE或者-> END进行结束 - 转移——节点和节点之间通过转移(->)进行连接
4.1. 句子之间通过<>可以粘合,但是尽可能不要大量使用
4.2. 选项也可以通过转移跳转到——且如果是转移到该选项,就相当于该选项被选择了 - 分支流程——通过对文本、选项、节点、转移进行组合就能得到分支流程
- 次级节点——以单个=开始,名称部分规范与节点一样
6.1. 次级节点的命名要具备节点内唯一性
6.2. 第一个次级节点是默认节点
6.3. 本地转移不需要父节点名称;而在节点外时使用需要父节点名称 - Include——通过Include将文本拆分到多个文件中
7.1. Include永远应该在顶部
7.2. 分割文件并不会影响命名空间 - 可变文字——将文字写在{…}大括号内,元素之间通过|垂直分割线进行分隔
8.1. 分为顺序(默认)、循环(&)、单次(!)和随机(~),在第一个大括号后进行标记
8.2. 以上形式可嵌套
二、缝合
- 焦点——通过使用焦点记号(-)可以将文本流汇聚在一起,减少对于转移、节点等的使用,保证故事流的线性和可阅读性
1.1. 主要的作用就是用选项将故事的路径分开,但是最后又让他们重新组合在一起 - 故事流嵌套——通过使用多个焦点符号(-)和选项符号(*)可以实现多级结构
2.1. 可嵌套任意多个级别 - 标签——通过使用圆括号可以进行标记(label)
3.1. 能够通过之前的决策来影响后面的内容,同时也能让结构更清晰
3.2. 仅作用于当前区块(节点/次级节点)
3.3. 所有的选项都可以被标记
三、变量和逻辑
- 全局变量——从故事的任何位置都可以读取到的数据
1.1. 全局变量可以通过VAR关键字在任何地方定义,并给予他们一个初始值,这个值定义了他们是一个什么类型的数据
1.2. 可以使用与之前显示可变文字一样,通过{}来输出和使用所需要的变量
1.3. 转移语句也是一种值,它可以被储存、更改、转移
1.4. 全局变量对外部可见 - 逻辑——也就是代码部分,通常在Ink中显示的都是默认的文本形式,因此我们需要使用~符号标记来进行逻辑上的工作
2.1. Ink支持基本的四则运算以及取余算法,如果需要更加复杂的操作可以编写函数(可以使用递归),或者调用外部函数代码
2.2. Ink中目前只有三种基本查询:相等(==)、不相等(!=)、子字符串(?) - 条件块——与常规if/else等效的功能,使用方式见这里
3.1. 条件块也可以用于控制故事内容以及逻辑,甚至可以将选项也放在条件块中,但是为了避免语法和结构混乱,条件块中的选项必须使用跳转而不能使用焦点
3.2. 多行块是基于条件块拓展的系统,通过关键字进行使用,分别为:顺序(stopping)、循环(cycle)、单次(once)和随机(shuffle),主要用于输出大段文字 - 临时变量——用于临时计算的变量,通过temp关键字进行使用
4.1. 当离开了变量所处的节点之后,变量就会被销毁
4.2. 临时变量一种特别有用的形式就是给任何节点和次级节点提供参数,例如== result(x) == - 函数——在节点上使用参数意味着它们基本上就是函数了,通过function关键字进行标记,返回值通过~ return进行使用
5.1. 函数具备以下属性
① 不包括次级节点
② 不能使用转移或提供选项
③ 可以调用其他函数
④ 可以输出内容
⑤ 可以返回任意类型的值
⑥ 可以安全的递归
5.2. 函数不一定需要返回值
5.3. 函数也可以在文本内被使用
5.4. 函数参数可以是引用类型,通过ref关键字进行使用 - 常数——不解释
四、进阶故事流控制
- 通道——通过一种新的转移将功能集成到语言中,这种转移的功能类似于子路线,语法是一个箭头-> 转移 ->
1.1. 通道本身使用->->语句来结束通道
1.2. 要注意,因为编译器不会在运行时检查隧道是否确实以->->语句结尾,因此需要仔细确认通道的语法是否正确 - 线程——作家可以将故事“分叉”到不同的部分,以涵盖更多玩家可能的动作
2.1. 个人觉得不好用,正常情况下可能永远用不到线程,一旦涉及到线程,工程本身一定会变得复杂!因此推荐别用
2.2. 线程可以将多个部分拼接在一起
以后还想起什么会再编辑