局部变量

局部变量(Local Variables)是我们为特定的事件函数创建的变量,然后在事件或函数完成后丢弃。如果局部变量是在自定义函数中创建的,则局部变量仅适用于该函数,然后在函数完成后将其丢弃。我们为什么需要它们?好吧,变量会占用内存中的空间,可能我们只将它们用于一个操作或函数,在这种情况下,我们只需要在使用它的那短时间内将其存入内存。这样可以使您的代码库保持干净整洁,并优化内存空间,以满足真正需要它的事物。要声明局部变量,我们使用var运算符,如下所示:

var _i, _num, _str;
_i = 0;
_num = 24.5;
_str = "Hello World";

// or

var _i = 0, _num = 24.5, _str = "Hello World";

// or

var _i = 0;
var _num = 24.5;
var _str = "Hello World";

所有以这种方式创建的变量将在创建它们的事件(或函数)结束时被 "遗忘"(即:从内存中删除)。你应该注意,你给所有var声明的变量起的名字不能与运行代码的对象中的另一个实例变量重合,而且还要确保你无意在你声明的事件或函数之外使用该变量中存储的值(在上面的例子中,所有var声明的变量都在变量名前面加上了下划线"_",但这并不是必须的,这样做只是为了在代码中更明显地说明我们在处理一个局部变量)。也就是说,如果你发现自己处于这样一种情况:你认为局部变量应该与实例变量相同,那么你可以使用self关键字来确定实例变量是独立的,比如说。

var hp = 10;
with (obj_Enemy)
{
    self.hp -= hp;
}

程序中经常使用局部变量,特别是在循环中用于计数迭代 ,或者在一个操作中多次使用一个值而不会再重复时。下面是另外几个例子。

var _i = 0;
repeat (10)
{
    inventory[_i] = 0;
    _i += 1;
}

上面的代码创建了一个名为"_i"的局部变量并将其设置为 0,所有这些都在同一行中。请注意,在之前版本的GameMaker中,您必须先声明局部变量,然后为其赋值,但在此版本中,您可以同时声明并为其赋值。然后,上面的代码使用该变量来初始化一个数组。由于变量"_i"不会用于实例中除此之外的任何其他函数,因此它的作用域可以是本地的。这里还有一个例子:

var _x, _y;
_x = x - 32 + irandom(64);
_y = y - 32 + irandom(64);
instance_create_layer(_x, _y, "Effects", obj_blood);

这里我们使用了局部变量"_x"和"_y"来存储一些随机的坐标,然后用它们来创建一个实例。在这个例子中,你可以看到,严格来说,我们没有必要使用这些变量,但为了可读性和易用性,我们还是使用了。比起使用这段代码,我们在这里做的事情要清楚和明显得多。

instance_create_layer(x - 32 + irandom(64), y - 32 + irandom(64), "Effects", obj_guts);

您还可以在单​​个局部变量语句中声明多个变量,并同时为每个变量分配一个值:

var a = 10, b = "a text", c = {index: 0, previous: -1};

注意您还可以在for循环的<赋值>部分中使用上述多变量初始化。

关于var声明的局部变量的最后一件事应该注意...由于它们对于运行它们的事件或函数来说是唯一的,因此它们也可以通过代码在任何其他实例中使用!这意味着我们可以使用这些变量通过"with()"构造来设置和更改其他实例中的内容(有关详细信息,请参阅有关变量范围的部分)。实际的代码本身看起来像这样:

var num = instance_number(obj_Enemy);
with (obj_Enemy)
{
    if num>10 instance_destroy();
}

上述代码之所以有效,是因为var声明的变量是它所包含的事件(或函数)的局部,而不是实例,也不是游戏世界,所以只要在同一个代码块中,就可以在任何对象的任何函数中使用。