충돌 타원 (collision_ellipse)
collision_ellipse
함수는 주어진 네 개의 인수 (x1, y1, x2, y2)를 사용하여 현재 방 내에서 타원의 너비와 높이를 정의하고, "obj" 인수로 정의된 객체나 타일 맵과의 충돌 여부를 확인합니다. 이 충돌은 정밀하게 확인할 수 있으며, 코드가 실행되는 인스턴스를 확인할지 여부도 선택할 수 있습니다.
함수 설명
인수 | 유형 | 설명 |
---|---|---|
x1 | 실수 | 확인할 타원의 왼쪽 x 좌표 |
y1 | 실수 | 확인할 타원의 위쪽 y 좌표 |
x2 | 실수 | 확인할 타원의 오른쪽 x 좌표 |
y2 | 실수 | 확인할 타원의 아래쪽 y 좌표 |
obj | 객체 | 객체 자산, 객체 인스턴스, 타일 맵 요소 ID, 키워드(all/other) 또는 이러한 항목을 포함하는 배열 |
prec | 불리언 | 정밀 충돌 여부 (true: 느림, false: 빠름) |
notme | 불리언 | 호출 인스턴스를 제외할지 여부 (true: 제외, false: 포함) |
반환값
- 객체 인스턴스 또는 타일 맵 요소 ID 또는 noone
예제 코드
if (collision_ellipse(50, 50, 200, 100, obj_Player, false, true) != noone) {
instance_create_layer(obj_Player.x, obj_Player.y, "Effects", obj_Splash);
}
위의 코드는 50x, 50y와 200x, 100y의 경계 내에서 "obj_Player" 객체와의 충돌을 확인합니다. 충돌이 발생하면 "obj_Player"의 x/y 좌표에 "obj_Splash" 인스턴스를 생성합니다.
활용 예제
- 플랫폼 게임에서의 충돌 감지
gml if (collision_ellipse(player.x - 10, player.y - 10, player.x + 10, player.y + 10, obj_Enemy, true, false)) { player.health -= 1; }
- 특정 지역에서 아이템 생성
gml if (collision_ellipse(100, 100, 300, 300, obj_Item, false, false)) { instance_create_layer(150, 150, "Items", obj_PowerUp); }
- 적과의 충돌 처리
gml if (collision_ellipse(enemy.x, enemy.y, enemy.x + enemy.width, enemy.y + enemy.height, obj_Player, true, true)) { game_over(); }
- 타일 맵과의 충돌 확인
gml if (collision_ellipse(0, 0, room_width, room_height, all, false, false)) { show_message("타일 맵과 충돌 발생!"); }
- 정밀 충돌을 통한 효과 적용
gml if (collision_ellipse(player.x, player.y, player.x + player.width, player.y + player.height, obj_Projectile, true, false)) { apply_effects(); }