본문 바로가기
GameMaker강좌[GMS2]/GMS2기초강좌

[게임메이커 강좌-기초][GMS2] 기본 충돌 체크 함수

by 타락카얀 2023. 2. 14.
728x90

 

 

GAME MAKER 강좌

 

KAYAN

 

 

 

 

 

◈ 충돌 체크 함수

 

 

 

게임메이커에서 충돌을 체크할 수 있는 함수는 여러가지가 있습니다.

 

(▲ 충돌 체크)

 

함수마다 각각 특징이 있어서 쓰임새에 따라 다양한 이벤트를 구성할 수 있습니다.

 

먼저, 충돌 체크시 상대 ID 값을 반환하는 함수들입니다.

 


   ◎ instance_place(x,y,obj)

   ◎ instance_position(x,y,obj)

 

instance_place 함수는 가장 일반적으로 사용하는 함수로 현재 인스턴스가 (x,y)위치에 있을 때,

지정된 인스턴스(obj)와 충돌시 상대 인스턴스의 id 를 반환하는 함수입니다.

 


   ◎ instance_place(x,y,obj)

 

이 함수는 기본적으로 현재 오브젝트에 지정한 충돌 마스크와 상대 오브젝트에 지정한 충돌 마스크 설정

기준으로 충돌을 체크합니다.

 

(▲ 체크하려면 충돌 마스크가 필요)

 

따라서 체크하고자 하는 오브젝트 간에 어느 쪽이라도 기본 스프라이트 이미지를 지정하지 않았거나,

마스크를 별도로 지정하지 않았다면 체크할 수 없습니다.

 

이 함수를 사용한다면 체크가 필요한 오브젝트에 스프라이트 이미지를 지정하거나 충돌 마스크 설정을

해주어야 체크할 수 있어요.

 

(▲ 충돌 마스크 설정)

 

※ [참고] : 오브젝트에 기본 스프라이트 이미지를 지정하고, 충돌 마스크 설정을 지정하지 않은 경우,

오브젝트에 지정한 기본 스프라이트 이미지를 기본 마스크로 인식합니다.

 


   ◎ instance_position(x,y,obj)

 

이 함수는 지정된 (x,y)위치에 지정한 인스턴스(obj)가 있다면, 충돌한 인스턴스의 id 를 반환하는 함수입니다.

instance_place 와 비슷해 보이지만, 다른 점은 instance_place 는 마스크와 마스크가 충돌 했을 때

상대 id 를 반환하는 것이고, instance_position 은 지정된 위치와 그 인스턴스의 마스크가 충돌 했을 때,

그 인스턴스의 id를 반환하는 것입니다.

즉, instance_place는 마스크와 마스크, instance_position은 점(위치)과 마스크의 충돌이 다릅니다.

 

 

(▲ instance_position 함수 )

 

비슷한 함수로 collision_point 가 있습니다.

 

 

 

 

 

 

◈ place 함수

 

 

아래의 함수들은 현재 오브젝트의 위치에 따라 true(1) 또는 false(0)를 반환하는 함수입니다.

 


   ◎ place_free(x,y)
   ◎ place_empty(x,y)
   ◎ place_meeting(x,y,obj)

 

일반적으로 충돌 마스크와 충돌 마스크의 충돌을 체크한다고 생각하시면 됩니다.

 

(▲체크하려면 충돌 마스크가 필요)

 

아래 함수는 현재 인스턴스가 (x,y) 위치에 있을 때, solid 오브젝트와 충돌하고 있지 않는지를 체크하는 함수입니다.

 


   ◎ place_free(x,y)

 

충돌하지 않으면(solid 오브젝트가 없으면) true 를 반환하고, 충돌 할 경우(solid 오브젝트가 있으면), false 를 반환합니다.

보통 플랫포머에서 바닥과 충돌하는지를 체크할 때 사용하기도 합니다.

 

(▲ solid 체크)

 


   ◎ place_empty(x,y)

 

이 함수는 현재 인스턴스가 (x,y) 위치에 있을 때, 그 어떤 인스턴스와도 충돌하고 있지 않는지를 체크하는 함수입니다.

충돌하지 않으면(마스크를 가진 오브젝트가 없으면) true 를 반환하고, 충돌 할 경우(마스크를 가진 오브젝트가 있으면), false 를 반환합니다.

place_free 함수와 place_empty 함수는 체크 방식이 비슷하지만, place_freesolid 오브젝트만 체크하고,

place_empty 함수는 마스크 설정을 가진 모든 오브젝트를 체크한다는 것이 다릅니다.

 


   ◎ place_meeting(x,y,obj)

 

이 함수는 현재 인스턴스가 (x,y) 위치에 있을 때, 지정한 오브젝트(obj)와 충돌하는지를 체크하는 함수입니다.

충돌 할 경우 true 를 반환하고, 충돌하지 않으면 false 를 반환합니다.

 


   ◎ place_snapped(hsnap,vsnap)

 

이 함수는 현재 인스턴스의 (x,y) 좌표가 지정한 격자(hsnap, vsnap)에 위치하고 있는지를 반환합니다.

격자에 위치하고 있다면 true, 그렇지 않다면 false 를 반환합니다.

 

(▲ 격자에 있는지 체크)

 

다만, (16,16) 의 격자를 설정했다면, (x,y) 좌표가 정확히 (16,16) 격자에 맞춰져야 충돌로 인정됩니다.

 

 

 

 

 

 

◈ position 함수

 

 

아래의 함수들은 오브젝트가 지정한 위치에 있는지에 따라 true(1) 또는 false(0) 를 반환하는 함수입니다.

 


   ◎ position_empty(x,y)
   
   ◎ position_meeting(x,y,obj)

 

일반적으로 점(x,y 위치)과 마스크의 충돌을 체크한다고 생각하시면 됩니다.

 

얼핏 보기에 place_ 함수와 비슷해보이지만, place_ 함수는 현재 오브젝트 기준으로 다른 오브젝트를

체크하는 방식이고, 이 position_ 함수는 점(x,y 위치) 기준으로 다른 오브젝트를 체크하는 것이 다릅니다.

 

(▲체크하려면 충돌 마스크가 필요)

 


   ◎ position_empty(x,y)

 

이 함수는 지정한 (x,y) 위치에 그 어떤 인스턴스라도 없는지를 체크하는 함수입니다.

인스턴스가 없다면 true, 있다면 false 를 반환합니다.

 


   ◎ position_meeting(x,y,obj)

 

이 함수는 지정한 (x,y) 위치에 지정한 오브젝트(obj)가 있는지를 체크하는 함수입니다.

지정한 오브젝트(obj)가 그 위치에 있다면 true를, 없을 경우는 false 를 반환합니다.

 

 

아래 함수는 바로 실행되는 함수입니다.

 


   ◎ position_destroy(x,y)

 

이 함수는 현재 인스턴스가 (x,y) 위치에 있을 때, 현재 인스턴스를 즉시 파기하는 것으로,

 


   if position_meeting(x,y,self){instance_destroy( );}

 

위 코드와 같은 형식의 함수입니다.

 

 

 

 

 

300x250

댓글