GAME MAKER 강좌
KAYAN
◈ 장애물을 체크하고 이동하는 기능을 가진 함수
장애물을 미리 체크하고 이동시킬 수 있는 함수가 있습니다.
먼저 아래 함수는 이동할 위치로 이동하다 장애물을 만나면, 이동을 멈추는 기능을 가졌습니다.
mp_linear_step(x,y,speed,checkall) |
(x,y)는 이동할 위치, speed 는 이동할 속도를 지정합니다. 그리고 checkall 은 모든 오브젝트를 장애물로
처리(1,true)할 것인지, 아니면 solid 오브젝트만 장애물로 처리(0,false)할 것인지를 지정합니다.
다만, 모든 오브젝트로 설정할 경우, 모든 오브젝트들을 장애물로 인식하여 이동이 제대로 이루어지지
않을 수 있습니다.
obj 는 장애물로 체크할 오브젝트를 지정하면 됩니다.
(▲ mp_linear_step 함수)
예를 들어, 이동할 때, solid 오브젝트만 장애물로 체크하고, (320,240)위치로 이동할 때
예) solid 오브젝트만 체크하고, 2의 속도로 (320,240)위치로 이동할 때 |
이와 같이 할 수 있습니다.
이것은 이동할 때 solid 오브젝트만 체크하고, 2의 속도로 (320,240)위치로 이동하게 됩니다.
그리고 목표지로 이동하다가 solid 오브젝트와 충돌한다면 이동을 멈추게 되지요.
그리고 아래 함수는 이동할 위치로 이동하다 장애물을 만나면, 그 장애물을 회피해 목적지 위치로
이동하는 기능을 가진 함수입니다.
mp_potential_step(x,y,speed,checkall) |
(x,y)는 이동할 위치, speed 는 이동할 속도를 지정합니다. 그리고 checkall 은 모든 오브젝트를 장애물로
처리(1,true)할 것인지, 아니면 solid 오브젝트만 장애물로 처리(0,false)할 것인지를 지정하면 됩니다.
다만, 모든 오브젝트로 설정할 경우, 모든 오브젝트들을 장애물로 인식하여 이동이 제대로 이루어지지
않을 수 있습니다.
obj 는 장애물로 체크할 오브젝트를 지정하면 됩니다.
(▲ mp_potential_step 함수)
예) solid 오브젝트만 체크하고, 2의 속도로 (320,240)위치로 이동할 때 |
이것은 이동할 때 solid 오브젝트만 체크하고, 2의 속도로 (320,240)위치로 이동하게 됩니다.
목표지로 이동하다가 solid 오브젝트가 있다면, 그 오브젝트를 회피하여 목표지로 이동하게 됩니다..
다만, 이 함수는 이동 경로에 장애물이 2~3개로 간단하게 배치되었을 때 사용하기 적합합니다.
장애물이 복잡하게 설정되어 있는 경우, 이동하다가 장애물을 계속 회피하려고, 한곳에 빙글빙글 돌며
머무르는 경우가 발생할 수 있기 때문이지요. 적당히 피할 수 있도록 장애물을 배치하는 것이 좋습니다.
아래의 함수는 장애물에 충돌 하기 전까지 이동시킬 수 있는 함수입니다.
move_contact_solid(dir,maxdist) : solid 오브젝트만 체크 |
dir 은 이동 방향, maxdist 는 이동 거리(0 초과의 양수값)를 지정하면 됩니다.
(▲ move_contact 함수)
예를 들어, 이동시 270 방향에 solid 오브젝트가 있을 때, 그 오브젝트 가까이 붙이고자 한다면,
예) 270방향의 solid 오브젝트 가까이 붙이고자 할 때 |
이와 같이 할 수 있습니다.
이것은 이동시 270방향에 최대 8 거리 이내에 solid 오브젝트가 있다면, 그 오브젝트 가까이 붙이게 됩니다.
그리고 장애물과 충돌했을 때, 장애물의 외곽으로 이동시킬 수 있는 함수가 있습니다.
move_outside_solid(dir,maxdist) : solid 오브젝트만 체크 |
dir 은 이동 방향, maxdist 는 이동 거리(0 초과의 양수값)를 지정하면 됩니다.
그러면 충돌하지 않을 때까지 지정한 방향으로 이동하게 됩니다.
(▲ move_outside 함수)
예를 들어, solid 오브젝트 내에 겹쳐 있다면, solid 오브젝트에서 90방향의 외곽으로 이동하고자 할 때,
예) 90도 방향의 solid 오브젝트 외곽으로, 최대 8 의 속도로 이동. |
이와 같이 할 수 있습니다.
이것은 solid 오브젝트 내에 겹쳐 있다면, solid 오브젝트에서 90방향의 외곽으로 이동하게 됩니다.
'GameMaker강좌[GM8] > 기초강좌' 카테고리의 다른 글
[게임메이커강좌-기초] ini 파일 작성 (2) | 2017.03.26 |
---|---|
[게임메이커강좌-기초] 중력에 의한 이동 (2) | 2017.02.13 |
[게임메이커강좌-기초] 장애물 인지 이동 1 (0) | 2017.01.08 |
[게임메이커강좌-기초] 방향과 속도에 의한 이동 (0) | 2017.01.07 |
[게임메이커강좌-기초] 좌표를 통한 이동 (5) | 2017.01.06 |
댓글