标记
标记允许您将属性添加到文本中,例如 [a]hello[/a]。您的游戏可以使用这些属性来执行更改文本格式、添加动画等操作。
解析文本时,将从文本中删除标签,并且您会收到有关属性适用的纯文本范围的信息。
属性
属性适用于文本范围:
Oh, [wave]hello[/wave] there!
纺纱机将获取此文本,并生成两件事:_纯文本_和_属性_集合。纯文本是指没有任何标记的文本;在这个例子中它将是:
Oh, hello there!
属性表示具有附加信息的纯文本范围。它们包含_位置_、长度、它们的_名称_以及它们的_属性_。
在此示例中,将生成单个属性,位置为 4,长度为 5,名称为“wave”。
属性打开方式如下 [this],并关闭像 [/this].
重叠属性
属性可以重叠:
您可以将多个属性放在一起。例如:
Oh, [wave]hello [bounce]there![/bounce][/wave]
您可以按照您喜欢的任何顺序关闭属性。例如,这与前面的示例具有相同的含义:
Oh, [wave]hello [bounce]there![/wave][/bounce]
自关闭属性
属性可以自动关闭:
[wave/]
自闭合属性的长度为零。
关闭所有标记
标记 [/] 是 close-all 标记。它关闭所有当前打开的属性。例如:
[wave][bounce]Hello![/]
特性
属性可以有属性:
[wave size=2]Wavy![/wave]
该属性“wave”有一个名为“size”的属性,其整数值为 2。
简写属性
属性可以具有简写属性,如下所示:
[wave=2]Wavy![/wave]
这与说这句话是一样的:
[wave wave=2]Wavy![/wave]
该属性“wave”有一个名为“wave”的属性,其整数值为 2。该属性的名称取自第一个属性。
房产类型
属性可以是以下任何类型:
- 整数
- 花车
- “真”或“假”
- 弦乐
不带引号的单个单词将被解析为字符串。例如,以下两行是相同的:
[mood=angry]Grr![/mood]
[mood="angry"]Grr![/mood]
空白修剪
如果自闭合属性前面有空格,或者位于行的开头,那么它将修剪后面的单个空格。这意味着以下文本会生成纯文本“A B”:
A [wave/] B
[!信息] 如果您不想修剪空白,请添加一个属性
trimwhitespace,设置为false:A [wave trimwhitespace=false/] B // (produces "A B")
向玩家显示特殊角色
您可能想要显示包含以下内容的文本 [ 和 ] 给你的玩家的角色。为了防止标记解析器将其视为特殊字符,您可以_转义_它们。已转义的文本将被视为纯文本,并且不会被解析器解释。
有两种方法可以转义标记:转义单个字符,以及使用 nomarkup 属性。
逃离单身 [ 和 ] 人物
如果需要转义单个方括号字符,请输入反斜杠 \ 在它前面:
Here's some square brackets, just for you: \[ \]
这对玩家来说将显示为:
Here's some square brackets, just for you: [ ]
反斜杠不会出现在文本中。
[!信息] 如果您需要在文本中显示黑斜杠,请使用两个黑斜杠:
Here's a backslash! \\这将显示为:
Here's a backslash! \
这 nomarkup 属性
如果您想要转义较长的文本,或者有很多方括号,那么一次转义单个字符可能会很麻烦。在这些情况下,您可能需要使用转义整个文本区域 nomarkup 属性。此属性使解析器忽略其中的任何标记字符。
如果你想包含像这样的字符 [ 和 ],将它们包裹在 nomarkup 属性:
[nomarkup]Here's a big ol' [ bunch of ] characters, filled [[]] with square [[] brackets![/nomarkup]
这将显示为:
Here's a big ol' [ bunch of ] characters, filled [[]] with square [[] brackets!
这 character 属性
这 character 属性用于标记标识正在说话的字符的行部分。
Yarn Spinner 将尝试通过在如下所示的行中查找字符名称来为您添加此字符:
CharacterA: Hello!
CharacterB: Oh, hi!
标记解析器将标记从行首到第一个的所有内容 : (以及其后的任何尾随空格)与 character 属性。这个属性有一个属性, name,其中包含从行首到行尾的文本 :。如果一个 : 不存在,或者 character 属性已添加到标记中,不会添加。
这意味着上面的示例的处理方式与此相同:
[character name="CharacterA"]CharacterA: [/character]Hello!
[character name="CharacterB"]CharacterB: [/character]Oh hi!
您可以使用它从游戏中的行中删除角色名称。
文本替换标记
Yarn Spinner 标记中的某些属性是替换标记,Yarn Spinner 使用这些属性根据变量的值插入或替换文本。
共有三个内置替换标记:
- 这
select标记使用变量的值来选择结果。 - 这
plural标记使用数字的值来决定该数字的_复数类别_。 - 这
ordinal标记使用数字的值来决定该数字的_序数类_。
所有这三个标记都有一个称为 value,并用它来决定该行中应使用哪些文本。
您也可以自己定制 替换标记.
select
这 select 标记是最简单的内置替换标记。它需要的值是 value 属性,并用它来选择替代品。
当您需要在一行中插入性别代词时,它特别有用:
// In this example, the $gender variable is a string that
// contains either "m", "f", or "nb".
I think [select value={$gender} m="he" f="she" nb="they" /] will be there!
// Depending on the value of $gender, this line can appear
// as one of these possible options:
I think he will be there!
// or:
I think she will be there!
// or:
I think they will be there!
plural 和 ordinal
这 plural 和 ordinal 标记在其内取一个数字 value 属性,并使用它来确定该值的复数或序数类。
不同语言中的复数形式
不同的语言对于数字的复数形式有不同的规则。
在许多语言中,用来指代某个事物的术语取决于该事物的数量。这被称为_复数类_:在英语中,你可以有一个_苹果_,但可以有很多_苹果_,并且你可以有一个_鼠标_,但是有很多_老鼠_。
然而,不同语言的规则差异很大。英语有两个:“single”和“other”。然而,例如波兰语有多个。
- 用英语,你说“一个苹果,两个苹果,五个苹果”。
- 在波兰语中,你说“一个苹果,两个苹果,五个苹果”。
请注意,波兰语中的“apple”“jabłko”随着数字的变化而呈现多种形式,而英语中则有两种形式。
在 Yarn Spinner 中,各个行会根据用户的区域设置进行替换,但它们周围的逻辑则不会。这意味着,如果您希望能够将游戏翻译成多种语言,则不能编写如下 Yarn 代码:
<<if $apple_count == 1>>
You have one apple!
<<else>>
You have {$apple_count} apples!
<<endif>>
如果你这样做,逻辑只适用于与英语具有相同复数规则的语言。 (其中有一些是这样做的,但更多的是不这样做的。)
更复杂的是,复数类有两种主要类型:_cardinal_复数类和_ordinal_复数类。
- 基数复数类别是我们刚刚看到的类型(例如,“一个苹果,两个苹果”)。
- 序数复数类指的是事物的位置;在英语中,序数词是“1st、2nd、3rd”之类的东西。
与基数复数类别一样,不同的语言也有不同的序数复数类别。
复数形式为 plural 和 ordinal
Yarn Spinner 能够获取数字和用户当前的区域设置,并为该区域设置确定该数字的正确基数或序数复数类别。然后,您可以使用复数类来决定要显示的文本。
plural 和 ordinal 有一个名为 value,就像 select。然后,它们拥有当前语言环境的每个复数类的属性。这些可以是:
onetwofewmanyother
这两个标记根据它们使用的复数类的类型而有所不同:
plural选择一个数字的_基数_复数类。ordinal选择一个数字的_ordinal_复数类。
并非每种语言都使用所有类别;例如,英语仅使用“one”和“other”来表示基数复数类别。
对于每个属性,您提供应显示的文本。
例如:
PieMaker: Hey, look! [plural value={$pie_count} one="A pie" other="Some pies" /]!
// This will appear as either:
PieMaker: Hey, look! A pie!
// or:
PieMaker: Hey, look! Some pies!
您可以使用以下命令将实际值包含在结果文本中 % 特点。该字符将被替换为提供给 value 财产:
PieMaker: I just baked [plural value={$pie_count} one="a pie" other="% pies" /]!
// This will appear as, for example:
PieMaker: I just baked a pie!"
// or:
PieMaker: I just baked 4 pies!"
这 ordinal 标记的工作方式类似,但使用序数复数类:
Runner: The race is over! I came in [ordinal value={$race_position} one="%st" two="%nd" few="%rd" other="%th" /] place!
// This will appear as, for example:
Runner: The race is over! I came in 1st place!
// or:
Runner: The race is over! I came in 23rd place!
在游戏中使用创客
您还可以使用标记从 Yarn Spinner 脚本触发游戏中的事件。要了解这一点,请查看 内联事件示例指南.