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

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

by 타락카얀 2016. 12. 15.
728x90



GAME MAKER 강좌



KAYAN








◈ 충돌 체크 함수



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



(▲ 충돌 체크)


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



instance_place(x,y,obj)



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

충돌시 상대 인스턴스의 id 를 반환하는 함수입니다.


이 함수는 마스크와 마스크의 충돌을 체크합니다.



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


따라서 체크하고자 하는 오브젝트 간에 어느 쪽이라도 마스크가 없다면 체크할 수 없습니다.

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

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


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


 

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)



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



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


 

place_free(x,y)



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

함수입니다. 충돌하지 않으면(solid 오브젝트가 없으면) true 반환하고, 충돌 할 경우(solid 오브젝트가

있으면), false 반환합니다.
보통 플랫포머에서 바닥과 충돌하는지를 체크할 때 사용하기도 합니다.


 

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) 좌표가 지정한 격자에 위치하고 있는지를 반환합니다.
격자에 위치하고 있다면 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

댓글