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

[게임메이커강좌-기초] 장애물 인지 이동 1

by 타락카얀 2017. 1. 8.
728x90



GAME MAKER 강좌



KAYAN









◈ 장애물 인지 이동



이번 강좌에서는 이동할 때 장애물을 인지하여 이동하는 방법에 대해 알아봅시다.



(▲ 장애물을 인지하고 이동)


플레이어가 이동할 때, 장애물을 인지하지 않고 이동하다보면 플레이어가 장애물에 끼어 움직이지 못하는

상황이 생깁니다.



(▲ 장애물에 끼이면 움직이지 못할 수 있음)


이것을 방지하려면, 이동할 때 장애물이 있는지 미리 체크하고 이동하는 것이 좋습니다.


(▲ 장애물을 먼저 체크하고, 그 다음에 이동)


예를 들어, 현재 좌표에서 오른쪽으로 5픽셀 이동한다면,


 

) 현재 좌표에서 오른쪽으로 5픽셀 이동하고자 할 때


체크할 장애물이 solid 오브젝트일 때
if place_free(x+5,y){x+=5;}



◎ 특정 장애물을 체크하는 경우 - 체크할 오브젝트가 obj_block 일 때
if place_meeting(x+5,y,obj_block){x+=5;}



이와 같이 할 수 있을 거에요.

이동 방향으로 먼저 x+5 위치에 장애물을 체크한 후, x 좌표를 5 정도 이동하는 것이지요.

그리고 만약 장애물이 있다면, 좌표 이동은 실행되지 않아 멈추게 됩니다.


이동거리가 긴 경우는 그 이동거리를 짧게 나누어 장애물을 체크해야합니다.

왜냐하면 이동거리가 길고, 장애물 폭이 짧을 때 장애물을 건너 뛸 수도 있기 때문이지요.
예를 들어, 오른쪽으로 320 만큼 이동한다면,


 

예) 오른쪽으로 320 만큼 이동할 때, solid 오브젝트를 체크하는 경우.

for(i=1;i<=320;i+=1;)

{
if place_free(x+i,y){x+=1;}
}



이와 같이 반복문으로 오른쪽 1픽셀씩 체크하여 solid 오브젝트가 없으면 오른쪽으로 1픽셀 이동하는

방법을 사용할 수 있습니다. 이것은 1스텝에 이루어지는 이동이기 때문에 실제로는 320 범위내에

이동 가능한 위치까지 바로 이동하는 것처럼 보일 거에요.




300x250

댓글