GameMaker Language에서의 반복문 사용법
GameMaker Language(GML)에서는 여러 가지 방법으로 코드를 반복 실행할 수 있습니다. 가장 간단한 방법은 repeat 문을 사용하는 것입니다. 이 문법은 다음과 같은 형식을 갖습니다:
repeat (<expression>) {
<statement>;
<statement>;
...
}
이 repeat 문은 주어진 문장을 표현식의 반올림된 값 만큼 반복 실행합니다.
예를 들어, 다음 코드는 5개의 공을 무작위 위치에 생성합니다:
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 위치에 그린 후, 스프라이트의 너비만큼 위치를 이동시킵니다.
언제 repeat 문을 사용해야 할까요?
특정 카운트를 유지할 필요 없이 고정된 횟수만큼 문장을 반복하고 싶을 때 repeat 문을 사용하는 것이 좋습니다.
break와 continue 사용하기
repeat 문 안에서 특별한 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가 이미 존재하는지 확인합니다. 존재한다면 현재 반복을 종료하고 새 반복을 시작하며, 존재하지 않는다면 해당 위치에 적 객체를 생성합니다.
다양한 활용 및 응용 예제
| 예제 이름 | 설명 | 코드 샘플 |
|---|---|---|
| 공 생성 | 5개의 공을 임의 위치에 생성 | gml repeat (5) { instance_create_layer(random(400), random(400), "Instances", obj_ball); } |
| 심장 그리기 | 전역적인 생명 수 만큼 심장 스프라이트를 그리기 | gml var _x = 32; repeat (global.p_lives) { draw_sprite(spr_heart, 0, _x, 32); _x += sprite_get_width(spr_heart); } |
| 배열 합산 | 배열 값을 합산하고 특정 값 초과 시 종료 | gml var i = 0; var temp = 0; repeat (10) { temp += array[i]; if (temp > max_total) { break; } else { i += 1; } } |
| 적 생성 | 적 객체를 임의 위치에 생성하고 중복 방지 | gml 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); } |
이러한 반복문들을 활용하여 여러분의 게임 로직을 간편하고 유연하게 구성할 수 있습니다. 추가적인 반복문 사용법에 대해서는 while, do... until, 그리고 for 문에 대한 섹션을 참조하세요.