본문 바로가기
GameMaker강좌[GM8]/3D기능강좌

[게임메이커강좌-3D 강좌]간단한 FPS게임 만들기-4-대쉬 기능

by 타락카얀 2014. 1. 23.
728x90

 

 

GAME MAKER 강좌

 

 

KAYAN

 

 

어떤 분이 달리기 기능에 대해 질문을 하셨는데, 답변으로 하기에는 조금 분량이 많은 것같아 강좌로

쓰기로 했습니다.
그래서 이번에는 달리기 기능에 대해 알아보도록 합시다.

 

 

(▲ 달리기)

 

이번 강좌는 이전 강좌까지 따라하셨다면 쉬운 부분이라고 생각합니다.
강좌로는 2가지 타입을 준비했습니다.
첫번째는 일반 FPS게임처럼 시프트키를 누른채 빠르게 이동하는 것과 두번째는 전진키를 두번

눌렀을 때 빠르게 이동하는 부분으로 나누었습니다.

 

 

 

 

 


◈달리기 기능 타입 1(obj_cam)

 


첫번째로 시프트 키를 누른채 이동하는 키를 누르면 달리는 방법에 대해 알아봅시다.
이 방법은 간단합니다.
시프트키를 눌렀을 때 속도값을 조절해주면 되는 겁니다.

그럼 일단 해봅시다.

카메라 오브젝트인 obj_cam 오브젝트의 Step 이벤트의 속도 설정부분으로 이동해요.
그러면 아래와 같은 부분이 있는데,

 



     ★ obj_cam - Step 이벤트

     spd=2; ◀속도 설정 부분

     //-----------------------

     dir=cam_zang;
     key_pressed=0;
     if keyboard_check(ord("A")){dir=cam_zang+90;
     x+=lengthdir_x(spd,dir)*place_free(x+lengthdir_x(spd,dir),y);
     y+=lengthdir_y(spd,dir)*place_free(x,y+lengthdir_y(spd,dir));key_pressed=1;}

     if keyboard_check(ord("D")){dir=cam_zang-90;
     x+=lengthdir_x(spd,dir)*place_free(x+lengthdir_x(spd,dir),y);
     y+=lengthdir_y(spd,dir)*place_free(x,y+lengthdir_y(spd,dir));key_pressed=1;}

     if keyboard_check(ord("W")){dir=cam_zang;
     x+=lengthdir_x(spd,dir)*place_free(x+lengthdir_x(spd,dir),y);
     y+=lengthdir_y(spd,dir)*place_free(x,y+lengthdir_y(spd,dir));key_pressed=1;}

     if keyboard_check(ord("S")){dir=cam_zang+180;
     x+=lengthdir_x(spd,dir)*place_free(x+lengthdir_x(spd,dir),y);
     y+=lengthdir_y(spd,dir)*place_free(x,y+lengthdir_y(spd,dir));key_pressed=1;}

     ...



여기에 있는 속도 설정 부분에서 속도를 조절해주면 되는 것이지요.
참고로 시프트 키에 대한 키코드는 vk_shift 입니다.


그러면 이벤트를 구성해봅시다.

 



     ★ obj_cam - Step 이벤트

     if keyboard_check(vk_shift){spd=5;}else{spd=2;}

     //-------------------------▲ spd=2 대신 이벤트 삽입

     dir=cam_zang;
     key_pressed=0;
     if keyboard_check(ord("A")){dir=cam_zang+90;
     x+=lengthdir_x(spd,dir)*place_free(x+lengthdir_x(spd,dir),y);
     y+=lengthdir_y(spd,dir)*place_free(x,y+lengthdir_y(spd,dir));key_pressed=1;}
     ...



spd=2 부분을 이렇게 변경해주면 됩니다. 간단하죠.
그러면 시프트 키를 눌렀을 때 속도를 빠르게 설정하고, 이동키를 누르면 그 속도에 맞추어 이동하게

되는 것이죠.

반대로 누르지 않았을 때는 천천히 이동하게 됩니다.

다음은 두번째 방법에 대해 알아봅시다.

 






◈달리기 기능 타입 2(obj_cam)

 


앞으로 이동하는 키를 두번 눌렀을 때 빠르게 이동하는 방법에 대해 알아봅시다.
이 방법도 간단한 원리를 가지고 있습니다.

먼저 키를 눌렀을 때, 대쉬에 대한 변수를 1로 만들고, 다음 키를 기다립니다.
물론 이때 약간의 지연시간을 두고 그 시간내에 한번 더 누르면 대쉬 변수가 2가 되어 달리기를 할 수

있지만, 시간이 지났을 때는 대쉬변수를 초기화시켜 다시 키를 두번 눌러야 합니다.

한번 만들어 봅시다.

먼저 카메라 오브젝트인 obj_cam 오브젝트의 Create 이벤트에 대쉬에 대한 변수를 추가 선언하도록

해요.

 



     ★ obj_cam - Create 이벤트

     dash=0;//대쉬 체크
     dash_delay=0;//대쉬 딜레이



다음은 Step 이벤트로 이동해서 첫번째 방법과 마찬가지로 맨 위에 있는 속도 설정하는 부분을 변경할

것입니다.

 



     ★ obj_cam - Step 이벤트

     spd=2; ◀속도 설정 부분

     //-----------------------

     dir=cam_zang;
     key_pressed=0;
     if keyboard_check(ord("A")){dir=cam_zang+90;
     x+=lengthdir_x(spd,dir)*place_free(x+lengthdir_x(spd,dir),y);
     y+=lengthdir_y(spd,dir)*place_free(x,y+lengthdir_y(spd,dir));key_pressed=1;}
     ...



첫번째 방법과 마찬가지로 여기서 spd=2 부분대신 대쉬 이벤트를 구성하면 됩니다.
자. 이벤트를 구성해봅시다.

 



     ★ obj_cam - Step 이벤트

     //대쉬 설정
     if keyboard_check_pressed(ord("W")){if dash<2{dash+=1;}dash_delay=20;}

     //대쉬 유지
     key_Forward=keyboard_check(ord("W"));
     key_Left=keyboard_check(ord("A"));
     key_Right=keyboard_check(ord("D"));
     key_Back=keyboard_check(ord("S"));

     if dash=2{
     if key_Forward=true || key_Left=true || key_Right=true || key_Back=true{dash_delay=20;}
     }

     //지연시간 체크 및 대쉬 초기화
     if dash_delay>0{dash_delay-=1;}else{dash_delay=0;dash=0;}

     //속도 설정
     if dash=2{spd=5;}else{spd=2;}



이것은 먼저 앞으로 이동하는 키를 눌렀을 때 대쉬 변수를 조작합니다.
첫번째 키를 눌렀을 때 대쉬 변수를 1로 만들고, 두번째 키를 누르면 대쉬 변수가 2가 됩니다.

변수가 2가 되었을 때는 빠르게 이동하게 되는 것이지요. 그리고 키를 재입력 할때까지의

지연시간을 설정합니다.

키를 눌렀다 떼었을 때 갑자기 대쉬를 초기화 시키면 아무래도 불편하겠지요.
그래서 이 대쉬가 작동될 때 어떤 방향의 키를 누르든, 이동 키를 눌렀을 때는 키 입력에 지연시간을

유지하여, 키를 눌렀다 떼고 다시 키를 입력할 때까지 잠깐 동안은 대쉬를 유지 시키도록 합니다.

그리고 대쉬 지연시간을 체크하여 대쉬를 초기화 할지를 정합니다.

지연시간동안 키를 누르지 않으면 지연시간은 감소하게 되고, 지연시간이 다되면 대쉬를

초기화하는 것이지요.

마지막으로 대쉬 변수가 2가 되었을 때 속도값을 높이고, 반대로 2가 아니라면 평상시의 속도로

설정하면 끝입니다.

제대로 되는지 테스트 해보도록 해요.

 

(▲ 테스트 화면)

 

 



 


------------ 예 제 ------------

 

- 시프트 키를 눌렀을 때 -

 

fpsX1-4-1(달리기_타입1).gmk
다운로드

 

fpsX1-4-1(달리기_타입1).exe
다운로드

 

- 두번 키를 눌렀을 때 -

 

fpsX1-4-2(달리기_타입2).gmk
다운로드

 

fpsX1-4-2(달리기_타입2).exe
다운로드

 

 

 

300x250

댓글