Skip to content

Variables

在GDevelop中,您可以使用_变量_来存储临时数据,例如数字和文本。例如,您可以使用变量来存储玩家的姓名、当前健康和分数。

注意

要了解如何存储非临时数据(例如玩家的保存进度),请参阅storage

数据类型

所有变量都有一个_数据类型_。变量的数据类型决定了变量可以包含的数据类型。

在GDevelop中,变量可以包含以下类型的数据:

  • 数字
  • 文本
  • 结构
  • 布尔值
  • 数组

数字、文本和布尔值是_基本类型_:它们存储一个值。结构和数组是_集合类型_:它们存储多个变量。

数字

数据类型为_数字_的变量可以包含数字值,例如0100-10。您可以对具有此数据类型的变量执行数学计算,例如乘法或除法。

文本

数据类型为_文本_的变量可以包含文本,例如单词Hello world。在编程语言中,此数据类型通常被称为_字符串_。在本文档中,术语_文本_和_字符串_可以互换使用。

布尔值

数据类型为_布尔值_的变量包含最简单的信息:是或否,未定义或0,真或假。它们很有用,因为可以轻松切换它们。

结构

结构变量将名称映射到其他变量(称为“子变量”)。

例如,一个简单的结构可以将名称“Hello”映射到一个子变量,将名称“World”映射到另一个子变量。您可以使用此数据类型在单个变量中组织相关变量。

提示

在编程语言中,此数据类型通常被称为_对象_、映射哈希_或_字典

可以使用变量编辑器、事件或使用扩展(例如JSON资源加载器)在变量编辑器中创建结构。

数组

数组变量,有时在编程语言中也称为_列表_,就像是一个变量列表。

数组中的每个变量都有一个索引,定义了它们在数组中的位置。索引从0开始,直到数组的长度为止。

可以使用变量编辑器、事件或使用扩展(例如JSON资源加载器)创建数组。

在表达式中使用变量

一旦将变量添加到项目或场景的变量编辑器中,您可以在表达式中简单地写入其名称来使用它。例如,如果您有一个名为“Score”的变量:

“您的总分为:”+ Score

对于某个对象的变量,您首先写入对象名称,然后是一个点和变量名称。例如:

“玩家的分数是”+ Player.Points

信息

如果多个变量或对象具有相同的名称,或者与参数(在函数中)或属性(在自定义行为或自定义对象中)冲突,则顺序如下:

  • 在场景中:对象 > 场景变量 > 全局变量,
  • 在扩展中:对象 > 参数 > 属性 > 共享属性。

这意味着如果存在名称冲突,对象将始终优先使用。否则,在场景事件中,如果存在场景变量,则优先使用场景变量,否则使用全局变量。在扩展中,首先使用具有给定名称的参数,如果存在其他属性。

访问结构或数组中的子变量

存在于集合变量(即数组或结构)中的变量被称为_子变量_。要访问子变量的值,请在表达式中使用以下语法,将尖括号中的值替换为变量名称:

<父变量>.<子变量>

假设我们有这样的结构:

要获取值123,我们可以写以下表达式

players.player1.level1score

或者,使用方括号:

players[\'player1\'][\'level1score\']

提示

在结构中,<子变量>是子变量的名称。对于数组,它是子变量的索引。只有数字可作为数组的索引

父变量需要声明,但对于子变量不需要。声明子变量的好处是在事件中获得自动完成。

注意

集合变量(结构和数组)可以包含其他集合变量。这使得可以在单个变量中存储复杂数据成为可能。这在处理来自各种来源的结构化数据时非常有用,包括来自Web服务或第三方的数据。

只要注意,如果创建了具有大量变量的结构,则数据可能变得难以管理。

动态访问子变量

您可以使用表达式动态访问子变量。

例如,假设存储了每个级别的玩家分数,称为 Level1Level2Level3 。如果要显示特定级别的玩家分数,则可以将当前级别号存储在名为 CurrentLevel 的变量中。然后,可以使用以下语法访问分数:

PlayerScore[\'Level\' + CurrentLevel]

方括号中的内容将被解释为子变量的名称。

如果需要使用变量来定义子路径的一部分,则路径中的所有后续子变量也需要用方括号括起来。在上面的示例中,如果您想要访问一个名为 PlayerScore.Level1.enemies.killbonus 的子变量,但仍动态定义级别,则会变成这样:

PlayerScore[\'Level\' + CurrentLevel].enemies.killbonus$$$

请注意,这等同于写下以下内容:

PlayerScore[\'Level\' + CurrentLevel][\'enemies\'][\'killbonus\']

作用域

变量的作用域决定了:

  • 变量可以从哪里访问
  • 变量在内存中存储的时间
  • 创建变量所需的步骤

在GDevelop中,有三种变量作用域:

请参阅链接页面了解有关每个变量作用域的更多信息。

提示

有时候,特别是在扩展中,不建议使用变量,因为有更好的替代方案。例如,在自定义行为中,您可以使用行为的属性在行为内部存储数据。

变量的命名

变量名不应包含点(句号)、逗号或空格。GDevelop还保留了其他字符。如果使用了禁止的内容,GDevelop将自动更正您输入的名称。

调试变量

在开发游戏时,由于变量的值与您期望的不符,可能会出现bug。如果游戏中的某些功能无法正常工作,并且您认为问题可能与变量有关,请使用GDevelop的调试器查找问题所在。

有关更多信息,请参阅调试器

参考

所有的动作、条件和表达式都列在变量参考页面中。