본문 바로가기
GameMaker강좌[GM8]/슈팅게임강좌

[게임메이커강좌-슈팅]탑뷰 슈팅게임 만들기-1-플레이어의 구성

by 타락카얀 2014. 4. 21.
728x90

 

 

GAME MAKER 강좌

 

 

KAYAN

 

 

 

이번 강좌에서는 탑뷰형 슈팅게임을 만들어 볼 것입니다.

 

 

(▲이번 강좌에서 만들게 될 슈팅 게임)

 

 

 

 

 

 

 

 

◈플레이어 이동(obj_player)

 


강좌에서 만들게 될 슈팅게임은 마우스 컨트롤을 이용한 슈팅게임입니다.
플레이어의 이동은 키보드로 하되, 플레이어의 방향은 마우스 포인터가 있는 방향으로 향합니다.

 

 

(▲ 플레이어는 마우스 포인터를 따라 방향을 변경함)


그리고 아래와 같이 총알을 발사할 때, 마우스 포인터가 있는 방향으로 발사하게 되지요.

 

 

(▲ 플레이어의 공격)

 

그리고 적들은 플레이어를 향해 이동하고, 공격을 할 것입니다.

 

이제 한번 만들어 봅시다.

먼저 플레이어로 사용할 이미지를 준비해 스프라이트(spr_player)로 추가합시다.
애니메이션이 있는 이미지도 좋고, 단순한 단일 이미지도 좋습니다.
강좌에서는 아래와 같이 애니메이션이 있는 이미지를 플레이어의 이미지로 사용할 것입니다.

 

 

(▲ 플레이어 이미지)


그리고 정확한 회전을 위해 스프라이트의 중심점을 가운데로 맞추도록 해요.

 

 

(▲ 중심점을 가운데로 맞춤)


가끔 중심점을 맞추지 않는 분이 계시는데, 고정된 이미지를 표시할 경우는 괜찮지만, 회전할 때는,

부정확한 회전을 하게 됩니다.

또한 (x,y)좌표 기준으로 충돌 체크할 때 제대로 이루어지지 않게 되는 경우도 있기 때문에

게임 특성에 따라 중심점을 맞추는 것이 좋습니다.

 

 

(▲ 마스크 설정)


충돌 판정을 위해 Modify Mask를 눌러 적당한 크기의 마스크를 설정해요.

강좌에서는 간단하게 사각형 형태로 중심 부위를 마스크로 설정했습니다.


이제 플레이어를 만들기 위해 오브젝트(obj_player)를 하나 만듭시다.

 

 

(▲ 플레이어 오브젝트)


다음은 Create 이벤트를 추가하고, 체력과 같이 플레이어 설정에 필요한 기본적인 변수들을

선언하도록 합니다.

 



     ★ obj_player - Create 이벤트

     hp=100;//체력
     hp_max=hp;//최대 체력
     pspeed=5;//이동 속도

     image_speed=0.3;//애니메이션 속도 조절(애니메이션이 있는 이미지를 오브젝트에 지정했을 경우)


 

강좌에서는 체력(hp, hp_max)과 플레이어의 이동속도(pspeed)를 사용자 변수로 선언했습니다.

그리고 image_speed는 오브젝트에 지정한 스프라이트 이미지의 재생속도를 조절하는데 사용합니다.

만약 오브젝트에 지정한 스프라이트가 단일 이미지라면, 굳이 애니메이션 속도를 조절할 필요는

없습니다.

 

이제 Step 이벤트를 추가하고, 이동에 대한 이벤트를 작성하도록 해요.
강좌에서는 방향키를 A, D, W, S 키를 방향키로 설정하고, direction 변수와 speed 변수를 사용해

8방향의 이동을 설정하도록 하겠습니다.

 



     ★ obj_player - Step 이벤트

     friction=0.1;//마찰력
     if keyboard_check(ord("A")){direction=180;speed=pspeed;}//왼쪽
     if keyboard_check(ord("D")){direction=0;speed=pspeed;}//오른쪽
     if keyboard_check(ord("W")){direction=90;speed=pspeed;}//위쪽
     if keyboard_check(ord("S")){direction=270;speed=pspeed;}//아래쪽

    
     //왼쪽 상단
     if keyboard_check(ord("A")) && keyboard_check(ord("W")){direction=135;speed=pspeed;}

     //왼쪽 하단
     if keyboard_check(ord("A")) && keyboard_check(ord("S")){direction=225;speed=pspeed;}

     //오른쪽 상단
     if keyboard_check(ord("D")) && keyboard_check(ord("W")){direction=45;speed=pspeed;}

     //오른쪽 하단
     if keyboard_check(ord("D")) && keyboard_check(ord("S")){direction=315;speed=pspeed;}



이것은 키를 눌렀을 때 이동하고, 키를 떼었을 때는 마찰력 변수를 이용해 속도를 점점 줄이는

방식입니다.
플레이어가 이동하다 정지하게 되면 미끄러지면서 멈추게 되는 것이지요.

[참고]
     문자키코드는 ord(문자키)를 사용합니다. 예를 들어 A키를 사용하고자 한다면 ord("A")식으로 변경해
     키코드로 사용해요. 그리고 방향키나 ctrl키, Enter키등과 같은 특수키는 vk_ 코드를 사용합니다.

 

[참고]
     &&and 와 같습니다.
     예) if a=1 && b=0{c=true;}   =    if a=1 and b=0{c=true;}

 

이제 이 게임의 특징인 플레이어의 이미지를 마우스 포인터 방향으로 향하도록 회전시켜야겠지요.
Step 이벤트에 아래와 같이 회전에 관련된 이벤트를 추가합시다.

 



     ★ obj_player - Step 이벤트

     image_angle=point_direction(x,y,mouse_x,mouse_y);//이미지의 회전



image_angle은 오브젝트에 설정한 스프라이트의 회전에 관련된 변수입니다.

참고로 이 변수는 이미지의 회전뿐아니라, 마스크의 회전에도 영향을 주게 됩니다.
이미지의 방향은 마우스 포인터(mouse_x,mouse_y)를 향하게 됩니다.


기본적인 이동 설정은 끝났네요.

체력이 0이 되었을 때 파기하는 이벤트도 추가하도록 해요.
Step 이벤트에 추가해도 되지만, 강좌에서는 보기 편하도록 End Step 이벤트 에 이벤트를 추가하도록
하겠습니다.

 



     ★ obj_player - End Step 이벤트

     if hp<=0{hp=0;instance_destroy();}



플레이어가 룸 밖으로 나가지 못하도록 End Step 이벤트에 이동 제한 이벤트를 추가해봅시다.

 



     ★ obj_player - End Step 이벤트

     x=max(0,min(x,room_width));
     y=max(0,min(y,room_height));



간단하죠.
이것은 플레이어의 (x, y)좌표가 룸 밖으로 나가지 못하게 좌표를 제한도록 하는 것입니다.

이동에 대한 설정이 끝났습니다.

룸이 뷰보다 클 때는 뷰가 플레이어를 따라가도록 만들어야겠지요.
일단 스테이지로 사용할 룸을 만든다음 배경을 꾸민 후, 플레이어 오브젝트(obj_player)를 배치하도록

합니다.

강좌에서는 약간 우주 느낌이 나는 배경을 배치했습니다.

 

그리고 views 탭으로 이동해 사용할 뷰를 설정하도록 합니다.
강좌에서는 기본 크기인 640 X 480 크기로 뷰를 설정하겠습니다.

 

 

(▲ 뷰 설정)


그리고 위와 같이 Object fallowing에 플레이어 오브젝트(obj_player)를 지정합니다.
HborVbor 에는 뷰의 반크기를 지정하시면 됩니다.

뷰의 설정도 끝났습니다. 굳!

이제 테스트할 시간입니다.

지금까지 설정한 것들이 제대로 되는지 테스트 해보도록 해요.

 

 

(▲ 테스트 화면)

 

 

 


- 계속 -

 

 

 

 


 

 

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

 

topview_ex1.exe
다운로드

 

topview_ex1.gmk
다운로드

 

 

 

300x250

댓글