GAME MAKER 강좌
KAYAN
◈ 그리드 기반의 길찾기(Path finding) 이동 거리 제한
이번 강좌에서는 길찾기에서 이동 거리 제한하는 방법에 대해 알아봅시다.
(▲ 이동 제한)
현 강좌는 [응용편1]강좌의 예제를 기반으로 합니다.
[응용편1]의 플레이어 이동은 아래와 같습니다.
//● obj_player - Step 이벤트 var mx,my; mx=(floor(mouse_x/global.grid)*global.grid)+floor(global.grid/2); my=(floor(mouse_y/global.grid)*global.grid)+floor(global.grid/2); var _break; _break=0; //---------- 이동 패스 구성 if move_on==0{ if position_meeting(mx,my,obj_block){_break=1;} if mouse_check_button_pressed(mb_left) && _break==0{ mp_grid_clear_all(global.move_grid); mp_grid_add_instances(global.move_grid,obj_block,0); x=(floor(x/global.grid)*global.grid)+floor(global.grid/2); y=(floor(y/global.grid)*global.grid)+floor(global.grid/2); mp_grid_path(global.move_grid,global.move_path,x,y,mx,my,0);//패스 작성 if path_get_number(global.move_path)>=2{ pspeed=2; path_start(global.move_path,pspeed,0,1);//패스를 따라 이동 move_on=1; } } } //---------- 이동 종료 if move_on==1{ if path_position==1{ path_end();//패스 종료 x=(floor(x/global.grid)*global.grid)+floor(global.grid/2);//위치 갱신 y=(floor(y/global.grid)*global.grid)+floor(global.grid/2); move_on=0;//이동 초기화 path_clear_points(global.move_path);//패스 클리어 } } |
여기서 패스 이동전에 패스를 구성하는 부분을 보아야 합니다.
강좌에서 패스는 mp_grid_path 함수로 구성하고, path_start 함수로 이동하는 순서죠.
이동 제한은 패스 포인트 총 개수에서 이동할 포인트만 남기고, 나머지 포인트를 삭제하면 됩니다.
이 패스 포인트 삭제는 이동할 패스를 변경하는 것으로 [패스작성]▶[패스 삭제]▶[이동 하기]
순서로 작성해야 합니다.
그리고 패스 포인트를 삭제할 때는 패스 포인트를 도착 지점을 기점으로 삭제하는 것이 좋습니다.
(▲ 패스 포인트 삭제)
이벤트를 구성하자면 아래와 같습니다.
패스를 작성하는 mp_grid_path 함수를 찾아봅시다.
그리고 패스 작성(mp_grid_path)과 패스 이동(path_start) 사이에 패스 포인트를 필요한 만큼 재구성하면 됩니다.
// 이동 거리를 move_point 라고 할 때 mp_grid_path(global.move_grid,global.move_path,x,y,mx,my,0);//패스 작성 //--------- ▼ 추가 move_point=5;//이동 거리 var n,i; n=path_get_number(global.move_path);//패스 포인트 수 for(i=n-1; i>move_point; i-=1;){//패스 포인트를 이동할 포인트만 남기고 끝에서부터 삭제 path_delete_point(global.move_path,i);//패스 포인트 삭제 } //--------- ▲ 추가 if path_get_number(global.move_path)>=2{ pspeed=2; path_start(global.move_path,pspeed,0,1);//패스를 따라 이동 move_on=1; } |
이것은 이동할 패스를 구성하고, 이동할 포인트를 재구성한 다음, 패스를 따라 이동시키도록 합니다.
간단하죠.
패스 포인트 0번은 현재 위치입니다.
패스 포인트가 최소 2개 이상일 때 이동시킬 수 있기 때문에, 이동 거리는 패스 포인트 1번부터
계산하시면 됩니다.
이제 잘 되는지 테스트 해봅시다.
※ 패스가 잘 구성되는지 확인하고 싶을 때는 [Draw 이벤트] 에서 draw_path 함수를 사용하면
사용중인 패스를 간단하게 표시할 수 있습니다.
예)
//● obj_system - Draw 이벤트 draw_path(global.move_path,0,0,1); |
(▲ 테스트)
'GameMaker강좌[GMS2] > 기타장르강좌' 카테고리의 다른 글
[게임메이커 강좌-기타][GMS2]미니맵 만들기 (0) | 2023.03.12 |
---|---|
[게임메이커 강좌-기타][GMS2]그리드 기반의 길찾기-6 A Star 알고리즘 (2) | 2023.01.29 |
[게임메이커 강좌-기타][GMS2]그리드 기반의 길찾기-4 응용편3 (0) | 2023.01.13 |
[게임메이커 강좌-기타][GMS2]그리드 기반의 길찾기-3 응용편2 (0) | 2023.01.12 |
[게임메이커 강좌-기타][GMS2]그리드 기반의 길찾기-2 응용편1 (0) | 2023.01.11 |
댓글