GAME MAKER 강좌
KAYAN
◈ collision 함수
게임메이커에서는 오브젝트와 오브젝트 간의 충돌 체크할 수 있는 것 이외에 가상의 도형으로 오브젝트와
충돌하는지 체크할 수 있는 함수들이 있습니다.
이번 강좌에서는 가상의 도형과 오브젝트간의 충돌 체크할 수 있는 함수에 대해 알아보도록 합시다.
아래 함수들은 가상의 기본 도형으로 충돌 체크하여, 상대 인스턴스의 id 를 반환(true/false가 아님)하는 함수들 입니다.
◎ collision_point(x,y,obj,prec,notme) ◎ collision_rectangle(x1,y1,x2,y2,obj,prec,notme) ◎ collision_circle(xc,yc,radius,obj,prec,notme) ◎ collision_ellipse(x1,y1,x2,y2,obj,prec,notme) ◎ collision_line(x1,y1,x2,y2,obj,prec,notme) |
일반적으로 이 함수들로 설정한 가상의 도형으로 오브젝트의 마스크를 충돌 체크한다고 생각하시면 됩니다.
(▲ 가상의 도형으로 오브젝트의 마스크와의 충돌을 체크)
따라서 체크하려는 오브젝트에 마스크가 지정되어 있어야 체크할 수 있습니다.
(▲ 체크하려면 체크 대상 오브젝트에 마스크가 지정되어 있어야 합니다)
함수들은 공통적으로 prec, notme를 가지고 있습니다.
◎ prec : prec 은 정확도를 지정하면 됩니다.
false 로 지정하면, 충돌 마스크 이미지의 사각형 충돌 경계 상자를 기준으로 단순 체크합니다.
true (느림)를 지정하면 지정한 충돌 경계 상자 모양대로 체크할 수 있습니다.
여기서 충돌 모양이 Precise 로 설정된 경우는 이미지 모양 대로 충돌을 체크할 수 있고,
원형(Disk), 다이아몬드형(Diamond)은 지정한 모양대로 체크 가능합니다.
◎ notme : notme 는 현재 인스턴스를 체크에서 제외 할지를 지정하면 됩니다.
true 로 지정하면 현재 인스턴스는 제외하고, false 로 지정하면 함수를 호출하는
현재 인스턴스까지 포함하고 충돌 검사합니다.
※ [참고] : 체크하려는 obj 가 현재 인스턴스의 parent, 또는, 현재 오브젝트, 현재 인스턴스 id와 같아야, 현재 인스턴스도 체크 할 수 있습니다.
※ [참고] : notme 를 false 로 지정하는 경우, 충돌 검사할 오브젝트(obj)가 함수를 호출하는 현재 오브젝트와 동일할 때, 함수를 호출하는 인스턴스 자신을 포함한 오브젝트(obj)의 모든 인스턴스에 대해 충돌 검사를 진행합니다. 이 경우 충돌 검사에서 자기 자신을 포함하기 때문에 자신의 id가 반환될 수 있습니다.
그리고 true 일 경우, 함수를 호출하는 오브젝트의 인스턴스 자신은 제외하고 다른 인스턴스에 대해서만 충돌 검사합니다.
◎ collision_point(x,y,obj,prec,notme) |
이 함수는 지정한 (x,y) 위치와 지정한 오브젝트(obj)가 충돌했을 때, 상대 인스턴스의 id 를 반환하는 함수입니다.
(▲ collision_point 함수)
if collision_point(x, y, obj_Cursor, false, true) { score += 10; } |
예시는 (x,y) 위치에 obj_Cursor 오브젝트의 인스턴스가 충돌한다면 score 값에 10을 더해줍니다.
◎ collision_rectangle(x1,y1,x2,y2,obj,prec,notme) |
이 함수는 지정한 사각형 위치에, 지정한 오브젝트(obj)가 충돌했을 때, 상대 인스턴스의 id 를 반환하는 함수입니다.
좌측 상단(x1,y1), 우측 하단(x2,y2)로 사각형의 크기를 설정할 수 있습니다.
(▲ collision_rectangle 함수)
var inst; inst = collision_rectangle(50, 50, 200, 100, obj_Ball, false, true); if inst != noone { with (inst) instance_destroy(); } |
예시는 지정한 범위에 obj_Ball 오브젝트의 인스턴스가 충돌한다면 해당 인스턴스를 파기합니다.
◎ collision_circle(xc,yc,radius,obj,prec,notme) |
이 함수는 지정한 원형에, 지정한 오브젝트(obj)가 충돌했을 때, 상대 인스턴스의 id 를 반환하는 함수입니다.
(xc,yc) 는 원형의 중심점, radius 는 반지름을 지정하면 됩니다.
(▲ collision_circle 함수)
if collision_circle(x, y, 20, obj_Cursor, false, true) { image_index = 1; } else { image_index = 0; } |
예시는 지정한 범위에 obj_Cursor 오브젝트의 인스턴스가 충돌한다면 image_index 값을 1로 설정하고, 그렇지 않다면 0으로 설정합니다.
◎ collision_ellipse(x1,y1,x2,y2,obj,prec,notme) |
이 함수는 지정한 타원형에 지정한 오브젝트(obj)가 충돌했을 때, 상대 인스턴스의 id 를 반환하는 함수입니다.
좌측 상단(x1,y1), 우측 하단(x2,y2)로 타원형의 크기(사각형 지정과 같음)를 설정할 수 있습니다.
(▲ collision_ellipse 함수)
if collision_ellipse(50, 50, 200, 100, obj_Player, false, true) { instance_create_layer(obj_Player.x, obj_Player.y, "Effects", obj_Splash); } |
예시는 지정한 범위에 obj_Player 오브젝트의 인스턴스가 충돌한다면, 그 위치에 obj_Splash 오브젝트를 Effects 레이어에 생성합니다.
◎ collision_line(x1,y1,x2,y2,obj,prec,notme) |
이 함수는 지정한 선분에 지정한 오브젝트(obj)가 충돌했을 때, 상대 인스턴스의 id 를 반환하는 함수입니다.
(x1,y1)과 (x2,y2)로 선의 길이를 지정할 수 있습니다.
(▲ collision_line 함수)
with (obj_Enemy) { if collision_line(100, 400, 100, 600, id, false, false) { instance_destroy( ); } } |
예시는 모든 obj_Enemy 오브젝트의 인스턴스에서 (100,400)~(100,600)을 잇는 선분의 충돌을 검사하고, 충돌하는 인스턴스는 파기합니다.
'GameMaker강좌[GMS2] > GMS2기초강좌' 카테고리의 다른 글
[게임메이커 강좌-기초][GMS2] 다중 충돌 체크 - 충돌 인스턴스 목록화 (0) | 2023.02.15 |
---|---|
[게임메이커 강좌-기초][GMS2] 가상의 충돌 체크 (0) | 2023.02.15 |
[게임메이커 강좌-기초][GMS2] 기본 충돌 체크 함수 (0) | 2023.02.14 |
[게임메이커 강좌-기초][GMS2] 충돌 체크와 충돌 이벤트 (0) | 2023.02.13 |
[게임메이커강좌-기초][GMS2] 텍스트 파일 작성 (0) | 2023.02.13 |
댓글