instance_nearest 함수 설명 및 활용 예제
instance_nearest 함수는 주어진 x/y 좌표에 가장 가까운 특정 오브젝트의 인스턴스를 찾아주는 함수입니다. 찾기 목적지로부터 가장 가까운 인스턴스를 확인하게 되며, 만약 인스턴스가 없다면 noone을 반환합니다. 인스턴스가 존재한다면 해당 인스턴스의 ID를 반환합니다.
문법
instance_nearest(x, y, obj);
인수 설명
| 인수 | 유형 | 설명 |
|---|---|---|
| x | 숫자 | 체크할 x 위치 |
| y | 숫자 | 체크할 y 위치 |
| obj | 오브젝트 | 인스턴스를 체크할 오브젝트 |
반환 값
- 인스턴스 ID 또는
noone
예제 코드
아래 코드는 현재 인스턴스를 10000 픽셀 이동시키고, 이전 위치에서 동일한 오브젝트의 가장 가까운 인스턴스를 찾는 예제입니다. 만약 발견된 인스턴스가 자기 자신이라면 추가 동작을 하지 않지만, 다른 인스턴스가 발견되면 두 인스턴스 간에 선을 그립니다.
var inst, xx;
xx = x;
x -= 10000;
inst = instance_nearest(xx, y, object_index);
if (inst != id) {
draw_line(x, y, inst.x, inst.y);
}
x += 10000;
활용 예제
1. 인스턴스를 찾고 특정 동작 실행하기
var closestInst;
closestInst = instance_nearest(x, y, obj_enemy);
if (closestInst != noone) {
// 적의 위치로부터 강하게 공격
attack(closestInst);
}
이 코드는 현재 인스턴스 주변의 적 인스턴스를 찾고, 위치가 유효하면 공격을 수행합니다.
2. 인스턴스의 상태에 따라 선 그리기
var targetInst;
targetInst = instance_nearest(x, y, obj_marker);
if (targetInst != noone) {
if (targetInst.active) {
draw_line(x, y, targetInst.x, targetInst.y);
}
}
위 코드는 obj_marker 타입의 가장 가까운 활성 인스턴스가 있으면 두 인스턴스 간에 선을 그립니다.
3. 거리 계산 후 인스턴스 제거
var closestInst;
closestInst = instance_nearest(x, y, obj_collectible);
if (closestInst != noone) {
var distance = point_distance(x, y, closestInst.x, closestInst.y);
if (distance < 50) {
instance_destroy(closestInst);
}
}
이 코드는 obj_collectible 타입의 인스턴스를 찾아서 현재 인스턴스와의 거리가 50 픽셀 이내일 경우 해당 인스턴스를 제거합니다.
결론
instance_nearest 함수는 인스턴스의 위치를 검사하고 가까운 인스턴스에 따라 동작을 수행하는 데 매우 유용합니다. 배운 예제를 바탕으로 다양한 게임 로직을 구현할 수 있습니다.