变量和变量作用域

变量是大多数编程操作的基本单位。与任何编程语言一样,GML使用它们。

它们用于将信息存储在设备内存中以供以后(或即时)使用,并指定名称,以便您可以在运行时脚本函数中引用它们。

GML中的变量可以存储许多不同的数据类型,例如实数(例如:1002.456575-56等)、字符串(例如:"Hello world!")、整数(例如:1556-7)或布尔值(truefalse),以及其他内容:

var _num = 126.4545;
var _str = "Hello World";
new_num = _num * 100;
global.my_string = _str + " I said";

也可以使用变量保存从函数返回的值,例如:

var _id = instance_nearest(x, y, obj_Tree);
root = sqrt(1000);
global.str = string_upper("Hello World");

因此,变量是我们可以命名并用于存储值以供以后在一个或多个操作中使用的东西。

一个很好的"真实的世界"变量的例子是某物的速度,例如:汽车的速度。汽车的速度显然是可变的,因为在某个时间点,汽车将静止不动(即其速度等于0),在另一时间点汽车将行驶(即,其速度大于0)。当汽车加速或减速时,它的速度会改变。因此,如果您想在GameMaker游戏中存储汽车的速度,则可以将其存储在变量中。在游戏中,你可以。当游戏开始时,将变量设置为0,并在您希望汽车改变其速度时更改它。

变量赋值

在 GML 中,与许多编程语言一样,您首先必须创建一个变量"赋值",然后才能使用它。这基本上意味着您告诉计算机您希望用于变量的名称并为其分配初始值。然后,变量在内存中被赋予一个位置来存储值或对其执行操作。变量赋值采用以下形式:

<variable> = <expression>;

表达式可以是一个简单的值,也可以是更复杂的值,因此,您可以使用+=将值添加到变量的当前值,而不是给变量赋值,例如:

a = 100;   // Assigning a simple value
b = 200;
c = 300;
a += b;    // Assigning with operation
a = b + c; // Assigning with expression

注意GameMaker 语言还将接受:=进行分配,尽管这通常不是最常见的方法:

<variable> := <expression>;

同样,您可以使用-=进行减法,使用*=进行乘法,使用/=除法,或者使用|=&=进行按位运算符,或^=。您还可以使用++--在值中添加或减去。如需了解更多信息,请参阅表达式和运算符部分。

请注意,您无法执行以下操作(或任何变更):

a = b = c = 4;

相反,应该按如下方式进行:

a = 4;
b = 4;
c = 4;

命名规则

GML中形成变量时,它们的名称必须以字母或下划线符号_开头,并且只能包含字母、数字和下划线符号_,最大长度为64 个符号。因此,有效的变量名称为fishfoo_barnum1_str,而无效的变量名称为6fishfoo bar,或*num

除非在这样的名称之前指定了实例或结构体(或像globalself这样的关键字),否则你不能将你的资产名称(例如精灵、脚本等)用作变量名。例如,如果你有一个名为Script1的脚本,则可以在实例或结构体中将一个名为Script1的变量定义为self.Script1 = <value>;。这样做明确了变量的作用域。有关更多信息,请参见下面的部分。

变量作用域

变量作用域告诉变量属于代码的哪一部分,它由您在代码中首先定义它的位置决定。变量作用域还告诉您可以从代码中的何处访问它。如果需要访问不同作用域中的变量,可以更改作用域。

改变范围

您可以通过两种方式访问​​不同范围内的变量:

变量a可以是实例,也可以是结构体。您还可以使用实例关键字全局关键字之一。

有关详细信息,请参阅在其他实例中寻址变量

范围类型

默认情况下,当您在对象事件中分配变量时,您会将它们分配给实例变量,但当您使用GameMaker编程时,实际上还有四种其他主要变量类型,每种类型都有自己的{ }范围

以下几页概述了不同类型的变量及其范围:

注意常量不是"真正的"变量,因为它们会被编译器替换为其基础值,并且在游戏中不作为变量存在。

内置变量

GameMaker 语言具有多个不同的内置变量,这些变量可以具有任何上述范围(本地除外)。这些变量很特殊,因为它们默认包含在游戏世界中的对象和房间中。上面提到的部分列出了一些内置全局变量,手册中针对精灵、房间、对象等的不同部分也概述了每种情况下可用的内置变量。

内置实例变量的示例有:

内置全局变量的例子有:

大多数内置变量都可以像其他变量一样进行更改和设置,有些甚至可以是数组(Arrays),只是你不必像创建常规变量那样设置它们,因为它们已经被初始化为默认值。

变量函数

最后,还有一些专门用于设置、获取或以某种方式检查变量的函数,可从以下页面获得: