원 안의 사각형 확인 함수
이 문서는 정의한 사각형 영역이 원과 충돌하는지 확인하는 rectangle_in_circle
함수에 대해 설명합니다. 이 함수는 사각형이 원과 충돌하지 않는 경우, 완전히 원 안에 있는 경우, 또는 단순히 접촉하는 경우를 판단합니다. 충돌이 전혀 없으면 함수는 0을 반환하고, 사각형이 원 안에 완전히 포함되면 1을 반환하며, 겹치는 경우에는 2를 반환합니다. 아래 이미지는 이 과정을 설명합니다.
문법
rectangle_in_circle(sx1, sy1, sx2, sy2, x, y, rad);
매개변수 설명
매개변수 | 타입 | 설명 |
---|---|---|
sx1 | 숫자 | 사각형의 왼쪽 x 좌표 |
sy1 | 숫자 | 사각형의 위쪽 y 좌표 |
sx2 | 숫자 | 사각형의 오른쪽 x 좌표 |
sy2 | 숫자 | 사각형의 아래쪽 y 좌표 |
x | 숫자 | 원의 중심 x 좌표 |
y | 숫자 | 원의 중심 y 좌표 |
rad | 숫자 | 충돌을 확인할 원의 반지름 |
반환값
- 0: 충돌 없음
- 1: 사각형이 원 안에 완전히 포함됨
- 2: 사각형과 원이 겹침
활용 예제
아래는 rectangle_in_circle
함수를 활용한 예제 코드입니다.
inst = instance_nearest(x, y, obj_Bullet);
if (instance_exists(inst)) {
if (rectangle_in_circle(inst.x - 5, inst.y - 5, inst.x + 5, inst.y + 5, x, y - 25, 20) > 0) {
hit = true;
}
}
위 코드는 rectangle_in_circle
함수를 사용하여 원 안의 충돌을 확인하고, 발견된 인스턴스 주위의 사각형과 충돌하는지를 판단합니다. 충돌이 발생하면 변수 hit
가 true
로 설정됩니다.
추가 활용 예제
- 충돌 감지 및 반응
gml if (rectangle_in_circle(player.x - 10, player.y - 10, player.x + 10, player.y + 10, enemy.x, enemy.y, enemy.radius) == 2) { player.health -= 1; // 플레이어의 체력 감소 }
- 게임 오브젝트 생성
gml if (rectangle_in_circle(spawn_area.x1, spawn_area.y1, spawn_area.x2, spawn_area.y2, player.x, player.y, 50) == 1) { instance_create(x, y, obj_PowerUp); // 파워업 생성 }
- 시각적 효과
gml if (rectangle_in_circle(effect_area.x1, effect_area.y1, effect_area.x2, effect_area.y2, player.x, player.y, 30) > 0) { draw_circle(player.x, player.y, 30, false); // 플레이어 주위에 원 그리기 }
이와 같이 rectangle_in_circle
함수를 활용하여 다양한 게임 로직을 구현할 수 있습니다.