Variables
在GDevelop中,您可以使用_变量_来存储临时数据,例如数字和文本。例如,您可以使用变量来存储玩家的姓名、当前健康和分数。
注意
要了解如何存储非临时数据(例如玩家的保存进度),请参阅storage。
数据类型
所有变量都有一个_数据类型_。变量的数据类型决定了变量可以包含的数据类型。
在GDevelop中,变量可以包含以下类型的数据:
- 数字
- 文本
- 结构
- 布尔值
- 数组
数字、文本和布尔值是_基本类型_:它们存储一个值。结构和数组是_集合类型_:它们存储多个变量。
数字
数据类型为_数字_的变量可以包含数字值,例如0
、100
和-10
。您可以对具有此数据类型的变量执行数学计算,例如乘法或除法。
文本
数据类型为_文本_的变量可以包含文本,例如单词Hello world
。在编程语言中,此数据类型通常被称为_字符串_。在本文档中,术语_文本_和_字符串_可以互换使用。
布尔值
数据类型为_布尔值_的变量包含最简单的信息:是或否,未定义或0,真或假。它们很有用,因为可以轻松切换它们。
结构
结构变量将名称映射到其他变量(称为“子变量”)。
例如,一个简单的结构可以将名称“Hello”映射到一个子变量,将名称“World”映射到另一个子变量。您可以使用此数据类型在单个变量中组织相关变量。
提示
在编程语言中,此数据类型通常被称为_对象_、映射、哈希_或_字典。
可以使用变量编辑器、事件或使用扩展(例如JSON资源加载器)在变量编辑器中创建结构。
数组
数组变量,有时在编程语言中也称为_列表_,就像是一个变量列表。
数组中的每个变量都有一个索引,定义了它们在数组中的位置。索引从0开始,直到数组的长度为止。
可以使用变量编辑器、事件或使用扩展(例如JSON资源加载器)创建数组。
在表达式中使用变量
一旦将变量添加到项目或场景的变量编辑器中,您可以在表达式中简单地写入其名称来使用它。例如,如果您有一个名为“Score”的变量:
“您的总分为:”+ Score
对于某个对象的变量,您首先写入对象名称,然后是一个点和变量名称。例如:
“玩家的分数是”+ Player.Points
信息
如果多个变量或对象具有相同的名称,或者与参数(在函数中)或属性(在自定义行为或自定义对象中)冲突,则顺序如下:
- 在场景中:对象 > 场景变量 > 全局变量,
- 在扩展中:对象 > 参数 > 属性 > 共享属性。
这意味着如果存在名称冲突,对象将始终优先使用。否则,在场景事件中,如果存在场景变量,则优先使用场景变量,否则使用全局变量。在扩展中,首先使用具有给定名称的参数,如果存在其他属性。
访问结构或数组中的子变量
存在于集合变量(即数组或结构)中的变量被称为_子变量_。要访问子变量的值,请在表达式中使用以下语法,将尖括号中的值替换为变量名称:
<父变量>.<子变量>
假设我们有这样的结构:
要获取值123
,我们可以写以下表达式
players.player1.level1score
或者,使用方括号:
players[\'player1\'][\'level1score\']
提示
在结构中,<子变量>
是子变量的名称。对于数组,它是子变量的索引。只有数字可作为数组的索引。
父变量需要声明,但对于子变量不需要。声明子变量的好处是在事件中获得自动完成。
注意
集合变量(结构和数组)可以包含其他集合变量。这使得可以在单个变量中存储复杂数据成为可能。这在处理来自各种来源的结构化数据时非常有用,包括来自Web服务或第三方的数据。
只要注意,如果创建了具有大量变量的结构,则数据可能变得难以管理。
动态访问子变量
您可以使用表达式动态访问子变量。
例如,假设存储了每个级别的玩家分数,称为 Level1
,Level2
,Level3
。如果要显示特定级别的玩家分数,则可以将当前级别号存储在名为 CurrentLevel
的变量中。然后,可以使用以下语法访问分数:
PlayerScore[\'Level\' + CurrentLevel]
方括号中的内容将被解释为子变量的名称。
如果需要使用变量来定义子路径的一部分,则路径中的所有后续子变量也需要用方括号括起来。在上面的示例中,如果您想要访问一个名为 PlayerScore.Level1.enemies.killbonus
的子变量,但仍动态定义级别,则会变成这样:
PlayerScore[\'Level\' + CurrentLevel].enemies.killbonus
$$$
请注意,这等同于写下以下内容:
PlayerScore[\'Level\' + CurrentLevel][\'enemies\'][\'killbonus\']
作用域
变量的作用域决定了:
- 变量可以从哪里访问
- 变量在内存中存储的时间
- 创建变量所需的步骤
在GDevelop中,有三种变量作用域:
请参阅链接页面了解有关每个变量作用域的更多信息。
提示
有时候,特别是在扩展中,不建议使用变量,因为有更好的替代方案。例如,在自定义行为中,您可以使用行为的属性在行为内部存储数据。
变量的命名
变量名不应包含点(句号)、逗号或空格。GDevelop还保留了其他字符。如果使用了禁止的内容,GDevelop将自动更正您输入的名称。
调试变量
在开发游戏时,由于变量的值与您期望的不符,可能会出现bug。如果游戏中的某些功能无法正常工作,并且您认为问题可能与变量有关,请使用GDevelop的调试器查找问题所在。
有关更多信息,请参阅调试器。
参考
所有的动作、条件和表达式都列在变量参考页面中。