`other` 정의 및 활용법
other는 두 가지 정의를 가지고 있습니다:
- 충돌 이벤트 내에서,
other는 현재 인스턴스와 충돌한 "다른" 인스턴스를 가리킵니다. - 그 외의 경우,
other는self가 변경되기 전의 이전 스코프를 나타냅니다. 예를 들어,with문을 실행한 인스턴스나 구조체를 나타냅니다.
이 페이지에서는 other의 두 가지 사용 사례 중 충돌 이벤트와 메서드 호출에 대한 내용을 설명합니다.
충돌 이벤트
충돌 이벤트는 두 인스턴스 사이에서만 발생할 수 있습니다. 여러 인스턴스 간의 충돌이 있을 수 있지만, 모든 충돌은 GameMaker에 의해 1대1로 해결됩니다. "self" 인스턴스와 "other" 인스턴스 간의 충돌로 해석됩니다.
예를 들어, 플레이어 인스턴스와 여러 적 인스턴스, 적이 발사하는 총알 인스턴스가 있다고 가정해 봅시다. 각 적에게 피해 변수가 다르게 지정된 단일 총알 인스턴스를 할당할 수 있습니다.
총알 생성 코드
var bullet;
bullet = instance_create_layer(x, y, "Bullets", obj_Bullet);
bullet.damage = 5 + irandom(5);
bullet.speed = 8;
bullet.direction = point_direction(x, y, obj_Player.x, obj_Player.y);
이 코드는 총알 인스턴스의 변수를 설정합니다. 이 경우, 총알이 플레이어에 맞았을 때 피해를 감지하기 위해, 플레이어가 obj_Bullet과 충돌 이벤트를 가져야 합니다.
피해 처리 코드
hp -= other.damage;
if (hp <= 0) instance_destroy();
위 코드는 other 인스턴스의 damage 변수를 플레이어의 hp 변수에서 뺍니다. 이후 hp가 0 이하인지 확인하여, 해당 경우 플레이어 인스턴스를 파괴합니다.
참고: other 인스턴스에는 체크하는 변수가 있어야 하며, 그렇지 않으면 오류가 발생합니다.other의 다양한 사용
충돌 이벤트 외에도 other는 다양한 상황에서 사용될 수 있습니다.
변수 할당
충돌 이벤트 내에서 other를 이용해 변수에 값을 할당하거나 새 변수를 생성할 수 있습니다:
// 다른 인스턴스의 "mana" 변수에 10 추가
other.mana += 10;
// 다른 인스턴스 변수 "hit"을 true로 설정, 존재하지 않으면 변수 생성
other.hit = true;
스코프 변화와 other
self가 변경될 때의 경우를 조명하겠습니다. with 블록 내부에서 other는 with() 함수를 호출한 인스턴스 또는 구조체를 참조합니다.
구조체 선언
구조체 선언 내에서는 스코프가 변경되지 않으므로 other는 self와 동일한 스코프를 참조합니다:
var _struct = { parent_instance: other };
show_debug_message(_struct.parent_instance == self); // '1' (true) 출력
other를 참조로 저장하기
self를 참조로 저장하는 방법과 관련하여 other도 비슷한 원칙이 적용됩니다.
예제 코드
name = "instance";
struct = { name: "struct", other_ref: other, other_name: other.name };
show_debug_message(struct.other_ref.name);
show_debug_message(struct.other_name);
이 코드는 instance와 struct를 출력합니다.
다른 스코프 내에서의 동작
아래 코드는 다른 스코프에서의 other 동작을 보여줍니다.
name = "other_instance";
with (inst) {
name = "instance";
struct = { name: "struct", other_ref: other, other_name: other.name };
show_debug_message(struct.other_ref.name);
show_debug_message(struct.other_name);
}
이 코드는 instance와 other_instance를 출력합니다.
인스턴스 메서드에서의 other
다른 인스턴스의 메서드 내에서 other는 해당 메서드를 호출한 인스턴스를 가리킵니다.
메서드 예제
// Object2
my_method = function() {
show_debug_message(object_get_name(self.object_index));
show_debug_message(object_get_name(other.object_index));
}
// Object1 지점에서 호출
Object2.my_method();
이 경우 Object2의 인스턴스명과 호출한 인스턴스(Object1)의 이름이 출력됩니다.
위의 내용과 예제를 통해 GameMaker에서 other 키워드를 활용하는 방법을 살펴보았습니다. 상황에 따라 other를 적절히 활용하여 보다 강력한 게임 로직을 구현할 수 있습니다.