repeat

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 精灵的宽度,将其位置沿着一点移动。

什么时候应该使用重复循环?任何时候,如果要在一个或多个语句上重复固定次数,而不需要任何特定的迭代计数。

值得注意的是,你也可以在breakcontinue语句中使用特殊的重复循环。使用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章节。