变量

有时,所呈现的选项或选择不同选项的结果会根据玩家在此之前所做或所说的其他事情而变化,这是有意义的。这需要使用逻辑变量,我们将在本节中讨论。

Yarn Spinner Script 是一种完整的编程语言,这意味着它支持编写代码,让您控制游戏中对话的工作方式。在本节中,您将学习如何使用变量来控制对话。

变量存储信息。变量可以存储三种类型的信息之一:数字字符串布尔值

每个变量都有一个名称。在 Yarn Spinner 中,所有变量名称均以美元符号 (`--- description: Learn about storing data using variables in Yarn Spinner Scripts. icon: binary

变量

有时,所呈现的选项或选择不同选项的结果会根据玩家在此之前所做或所说的其他事情而变化,这是有意义的。这需要使用逻辑变量,我们将在本节中讨论。

Yarn Spinner Script 是一种完整的编程语言,这意味着它支持编写代码,让您控制游戏中对话的工作方式。在本节中,您将学习如何使用变量来控制对话。

变量存储信息。变量可以存储三种类型的信息之一:数字字符串布尔值

每个变量都有一个名称。在 Yarn Spinner 中,所有变量名称均以美元符号 ().

声明变量

声明变量意味着告诉 Yarn Spinner 变量存在、它的用途以及它的初始值。

[!警告] 您应该始终在首次使用变量之前对其进行声明。

要声明变量,您可以使用 <<declare>> 命令:

/// The name of the player.
<<declare $playerName = "Reginald the Wizard">>
 
/// The number of gold pieces that the player has.
<<declare $gold = 42>>
 
/// Is the door to the dungeon unlocked?
<<declare $doorUnlocked = false>>

[!警告] 如果您在未声明的情况下使用变量,Yarn Spinner 将尝试根据脚本中的使用方式来确定它应该具有什么类型,以及它应该具有什么初始值 - 数字为零,布尔值为 false,字符串为空白文本。当变量未声明时,我们将其称为_隐式_声明。

如果声明一个变量,您可以确保该变量的类型是您想要的类型。声明变量还可以让您控制变量的初始值,并让您添加描述性注释,向其他人(或未来的您!)解释变量的用途。

您可能会发现创建一个特殊节点很有用(例如,标题为 Setup或类似)仅用于 <<declare>> 你的叙述中使用的所有变量。您无需运行此节点即可使声明生效。

设置变量

您可以使用以下命令将信息放入变量中 <<set>> 命令。例如,以下 Yarn Spinner 脚本放置一个字符串, "Hello, Yarn!",进入一个名为的变量 $greeting:

<<set $greeting to "Hello, Yarn!">>

[!警告] 与节点标题一样,变量名称不得包含空格。虽然它们可以包含一系列不同的字符,但第一个字符必须是字母。一般来说,您的变量仅由字母、数字和下划线组成。

变量和类型

纺纱机中的变量可以存储三种类型的信息之一:数字字符串布尔值:

类型可能的值示例
数字任何整数或小数12.53468900-500
字符串任何字母、数字和其他字符序列,用引号引起来。"Hello", "", "A Whole "
布尔值true 或值 falsetrue, false

每个变量只能存储一种类型的值。变量可以随时更改其值,但永远不能更改其类型。

例如,以下 Yarn Spinner 脚本将起作用:

// Set some initial values in some variables
<<declare $myCoolNumber = 7>>
<<declare $myFantasticString = "wow, text!">>
 
// Now change them!
<<set $myCoolNumber to 8>>
<<set $myFantasticString to "incredible!">>

这是有效的,因为虽然每个变量的值发生变化,但类型不会改变。

但是,以下 Yarn Spinner 脚本将不起作用

// Set some initial values in some variables
<<declare $myCoolNumber = 7>>
<<declare $myFantasticString = "wow, text!">>
 
// This will NOT work, because you can't change types!
<<set $myCoolNumber to "eight">>
<<set $myFantasticString to 42>>

这是行不通的,因为当它们被声明时, $myCoolNumber 被设置为一个数字,并且 $myFantasticString 设置为字符串,因此它们只能存储该类型的信息。

[!危险] 变量不能为空。所有变量都需要有一个值。

变量和表达式

您可以使用变量中存储的值。

例如,数字可以相乘,字符串可以组合,布尔值可以应用逻辑运算(如 andor)。当值像这样一起使用时,称为表达式:

// 在 $numberOfSidesInATriangle 中存储 3
<<设置 $numberOfSidesInATriangle = 2 + 1>>

// 将 4 存储在 $numberOfSidesInASquare 中
<<设置 $numberOfSidesInASquare = $三角形边数 + 1>>

表达式必须是单一类型。您无法在单个表达式中使用不同类型的值。

例如,以下代码将不起作用

// This will NOT work, because you can't add a string and a number:
<<set $broken = "hello" + 1>>

Yarn Spinner 提供了用于在某些类型之间进行转换的内置函数:

  • string() 函数将任何类型的值转换为字符串。
  • number() 函数将任何类型的值转换为数字(如果可以解释为数字)。
  • bool() 函数将任何类型的值转换为布尔值(如果可以解释为布尔值)。

这些函数在纱线纺纱器脚本中工作。它们都是通过在之间传递来工作的 (),任何时候的值,无论是直接的还是通过引用另一个变量,并且它们返回相同的值,转换为适当的类型。

例如,请考虑以下情况:

<<declare $aNumber = 42>>
<<declare $aString = "This is my string.">>
<<set $aString = string($aNumber)>>

在此代码片段中,我们声明变量 $aNumber 并为其指定默认值 42, 所以 $aNumber 将始终存储一个数字,并且我们声明变量 $aString 并为其指定默认值 "This is a string", 所以 $aString 将始终存储一个字符串。

然后,我们使用 <<set>> 命令更新存储在 $aString,并为其赋值 $aNumber (这是一个数字,不能直接分配给字符串)使用 string() 功能。因此, $aString 然后将包含字符串 "42".

运营商

纺纱机支持以下逻辑运算符。其中大多数都有多种编写方式:

  • 平等: eq 或者 is 或者 ==
  • 不等式: neq 或者 !
  • 大于: gt 或者 >
  • 少于: lt 或者 <
  • 小于或等于: lte 或者 <=
  • 大于或等于: gte 或者 >=
  • 布尔“或”: or 或者 ||
  • 布尔“异或”: xor 或者 ^
  • 布尔值“非”: not 或者 !
  • 布尔“与”: and 或者 &&

Yarn Spinner 还支持以下数学运算符:

  • 添加: +
  • 减法: -
  • 乘法: *
  • 分配: /
  • 截断余数除法: %
  • 括号: ( 打开括号并 ) 关闭它们。

操作顺序

纺纱机遵循相当标准的操作顺序,并且当操作员具有同等优先级时,会回退到使用从左到右的方式。

操作顺序如下:

  1. 括号
  2. 布尔否定
  3. 乘法、除法和截余除法
  4. 加法、减法
  5. 小于或等于、大于或等于、小于、大于
  6. 平等、不平等
  7. 布尔与、布尔或、布尔异或

在行中使用变量

要显示变量的内容,请将其放在大括号内 ({ }) 在一行内。该变量的值将出现在其位置。例如:

选项卡:片段

<<set $variableName to "a string value">>
The value of variableName is {$variableName}.

选项卡:输出

The value of variableName is a string value.

写一个使用变量的故事

步骤1

创建使用变量的 Yarn Spinner 脚本。

创建一个新的叙述,使用两个变量来跟踪玩家姓名和货币数量。请务必声明它们。

步骤2

使用 <<set>> 命令适当更新变量的值

确保您记住类型!