GameMaker语言有多种方法可以执行循环,即:让语句或语句在自身上迭代一定次数。其中最简单的是重复语句,其形式为:
repeat (<expression>)
{
<statement>;
<statement>;
...
}
使用repeat,给定的语句被重复,其次数由表达式的四舍五入值表示。例如,下面的语句在随机位置创建了五个球。
repeat (5)
{
instance_create_layer(random(400), random(400), "Instances", obj_ball);
}
这对于避免多次输入相同的代码非常有用,或者对于使用数组,或者对于通过一些操作计数等等。你也不限于使用单一的语句,可以通过将多个语句括在大括号中来重复使用。比如说。
var _x = 32;
repeat (global.p_lives)
{
draw_sprite(spr_heart, 0, _x, 32);
_x += sprite_get_width(spr_heart);
}
上面的例子重复大括号中的语句,无论 "lives "全局变量有多少迭代 ,每次迭代都会在_x的位置画出 heart 精灵,然后根据 heart 精灵的宽度,将其位置沿着一点移动。
什么时候应该使用重复循环?任何时候,如果要在一个或多个语句上重复固定次数,而不需要任何特定的迭代计数。
值得注意的是,你也可以在break和continue语句中使用特殊的重复循环。使用break将立即退出循环,并在循环结束后继续处理事件或函数中的任何代码,例如。
var i = 0;
var temp = 0;
repeat (10)
{
temp += array[i];
if (temp > max_total)
{
break;
}
else
{
i += 1;
}
}
上面的代码循环了10个数组的值,并将它们添加到一个局部变量中。如果局部变量的总数大于max_total的给定值,则使用break终止循环,否则将继续循环。
在重复循环中使用continue的例子是。
repeat(10)
{
var _x = random(room_width);
var _y = random(room_height);
if (instance_position(_x, y, obj_Enemy)
{
continue;
}
instance_create_layer(_x, _y, "Instances", obj_Enemy);
}
这段代码将重复10次,生成一个随机的房间位置,然后检查该位置是否存在一个对象obj_Enemy的实例。如果存在,则使用continue终止当前的循环迭代,并开始新的迭代;如果不存在,则在随机位置创建一个对象obj_Enemy的实例。
更多关于循环函数的例子,请参见while,do...until,和for章节。