본문 바로가기
GameMaker강좌[GM8]/액션게임강좌

[게임메이커강좌-플랫폼]간단한 플랫폼게임 만들기-2-게임 구성

by 타락카얀 2013. 5. 20.
728x90








플랫폼게임의 기본적인 게임 구성을 해봅시다.








◈뷰를 플레이어 따라 이동시키기



룸이 뷰보다 큰 경우 일부분 밖에 나오지 않게 되지요.
하지만 뷰를 이동하면 보이지 않는 화면도 볼 수 있게 됩니다.
그래서 룸이 뷰보다 큰 경우 뷰를 플레이어 따라 이동하게 해봅시다.
일단 룸을 열고, views 탭으로 이동합니다.



(▲뷰 설정)


Enable the use of Views(뷰 사용 활성화)Visible when room starts(룸 시작시 표시)를 체크합니다.
다음은 뷰의 크기는 실제 게임 화면의 크기이므로 적당하게 설정합니다.

뷰가 플레이어를 따라가게 하기 위해 Object following에 플레이어 오브젝트를 지정합니다.

이제 어느정도의 위치에 있을 때 이동시킬지를 정하는 것이 남았습니다.



(▲뷰를 이동)


Hbor는 가로의 여분, Vbor는 세로 여분입니다.
이 여분의 지역에 플레이어 오브젝트가 닿으면 이동하게 되는 것입니다.
HspVsp는 가로와 세로의 이동 속도입니다.
기본값은 -1인데 이것은 가장자리로 위치할 수록 빨라집니다.
값은 -1이상의 값을 지정하시면 됩니다.






◈게임 구성



플레이어가 룸아래로 떨어졌을 때 게임을 다시 시작해야겠지요.
여러가지 방법이 있겠지만, 플레이어가 죽었을 때 룸을 재시작하는 것으로 처리 해보도록해요.

먼저 룸을 재시작하는 이벤트를 작성하기 위해 오브젝트를 하나 만듭시다.



(▲중력 설정)


그리고 재시작하기 전에 약간의 대기시간을 주면 좋겠지요.
Create이벤트에 알람을 설정합시다.


     number of steps : 120
     in alarm no : Alarm 0


Alarm 이벤트를 추가하고, 재시작 이벤트를 작성합니다.



(▲룸 재시작 액션)


Alarm 이벤트를 추가하고, main1 -> Rooms -> Restart Room을 넣습니다.
룸 전환 효과가 필요하다면, 효과를 선택하시면 됩니다.

다음은 플레이어가 룸 아래로 떨어졌을 때의 상황을 작성해봅시다.
먼저 Outside Room 이벤트를 추가하고,



(▲플레이어가 룸 밖으로 떨어졌을 때)


조건문으로 control -> Variables -> Test Variable 액션을 삽입하고


     variable : y
     value : room_height
     operation : larger than


이것은 플레이어의 y좌표가 룸 높이이상으로 내려갔을 때의 조건문입니다.
(룸 높이=room_height, 룸 넓이=room_width)

다음은 룸 재시작 이벤트를 작성해놓았던 오브젝트를 생성하면 됩니다.



(▲룸 재시작 오브젝트를 생성한후 플레이어는 파기함)


main1 -> Objects -> Create Instance 액션을 삽입하고


     object : obj_restart
     x : 0
     y : 0


딱히 그래픽을 표시하는 것이 아니기 때문에 아무 곳에 생성하면 됩니다.
그러면 자동적으로 몇초후에 룸을 재시작하게 됩니다.

그리고 main1 -> Objects -> Destroy Instance 액션을 삽입하고
필요없어진 플레이어를 파기하도록 합니다.

테스트해보고 잘되는지 확인해보도록 합시다.

obj_restart : 룸 재시작 오브젝트






◈트랩



이번엔 트랩을 만들어봅시다.
트랩은 다양할 수 있으므로 parent로 설정할 오브젝트를 먼저 만들어요.
강좌에선 obj_trap으로 만들었어요.

그리고 하위오브젝트로 트랩(실질적으로 배치)을 만들고 parent를 이전에 만든 오브젝트(obj_trap)
지정합니다.



(▲트랩)


이 트랩의 이름은 obj_trap1로 지었습니다.

플레이어로 넘어가서 이 트랩과의 충돌이벤트를 작성해봅시다.
대상 트랩은 parent로 지정하면 됩니다.



(▲트랩과의 충돌이벤트)


트랩과 충돌 이벤트를 추가하고, main1 -> Objects -> Create Instance 액션을 삽입합니다.


     object : obj_restart
     x : 0
     y : 0


그러면 트랩에 부딪히면 룸을 재시작하게 되지요.
그리고 main1 -> Objects -> Destroy Instance 액션을 삽입하여 필요없어진 플레이어를 파기합니다.


obj_trap : 트랩 parent
obj_trap1 : 트랩1(실제 배치용)





◈이펙트



플레이어가 파기될 때 어떠한 이펙트를 생기게하면 좋겠지요.



(▲플레이어가 파기될때의 효과)


위와 같은 이펙트를 만들어 봅시다.



(▲필요한 이미지들, 이미지의 중심점은 가운데로 맞춤)


일단 빨간 원을 구성해봅시다.
원을 흰색으로 정한 이유가 이미지 하나로 여러가지 색을 입힐 수 있기 때문입니다.


(▲이미지에 색을 혼합시킴)


먼저 이펙트를 생성할 오브젝트(obj_effect1)를 하나 만들고, Create이벤트main1 -> Sprite -> Color Sprite액션을 삽입합니다.


     color : Red
     alpha : 1


이 액션은 색을 혼합시킬 수 있고, 투명도를 조절할 수 있는 액션입니다.
완전히 불투명한 것은 1이고, 완전히 투명한 것은 0입니다.

다음은 Step이벤트로 가서 이 투명도를 조절합시다.



(▲투명도 조절)


마찬가지로 main1 -> Sprite -> Color Sprite액션을 삽입합니다.


     color : 빨강
     alpha : image_alpha


이것은 투명도(image_alpha)로 설정된 변수값에 따라 변하게 됩니다.

다음은 투명도값을 조절합니다.



(▲투명도값 조절)


control -> Variables -> Set Variable 액션을 삽입하고


     variable : image_alpha
     value : -0.05
     [V]Relative


이것은 image_alpha를 -0.05씩 감소하게 하는 것입니다.
그러면 점점 투명해지겠지요.


다음은 이 투명도가 0보다 작을 때 파기하도록 합니다.



(▲투명도 0보다 작으면 파기함)


조건문으로 control -> Variables -> Test Variable 액션을 삽입하고


     variable : image_alpha
     value : 0
     operation : smaller than



(▲투명도 0보다 작으면 파기함)


그리고 main1 -> Objects -> Destroy Instance 액션을 삽입하여 필요없어진 이펙트를 파기합니다.

다음은 해골 이펙트입니다.
오브젝트(obj_effect2)를 하나 만들고, 위와 같은 이펙트와 같이 이벤트를 구성하면 됩니다.


(▲혼합색만 흰색)


흰색으로 하는 이유는 원래 이미지대로 표시할 수 있기 때문입니다.

Create 이벤트를 추가하고, 마찬가지로 main1 -> Sprite -> Color Sprite액션을 삽입합니다.


     color : 흰색
     alpha : 2


값을 1보다 크게 설정하면 약간의 딜레이를 줄수 있겠지요.

Step 이벤트를 추가하고, 혼합색만 흰색으로 하고 이전 이펙트와 마찬가지로 작성합니다.

다음은 이 이펙트를 생성할 생성기용 오브젝트(obj_ef_creator)를 하나 만듭시다.
이 오브젝트는 안보이는 오브젝트이므로 스프라이트에 적당한 이미지를 지정하고, visibe

체크해제합니다.



(▲이펙트들을 생성할 오브젝트)


Create이벤트를 추가하고, 이펙트를 퍼져나가는 방향을 제어할 변수하나를 선언합니다.
control -> Variables -> Set Variable 액션을 삽입하고


     variable : i
     value : 0


control -> Other -> Repeat 액션을 삽입합니다.


     times : 8


이것은 반복문 액션으로 원형 이펙트들을 8방향으로 줄줄이 생성할 것입니다.

다음은 이펙트를 생성해야겠지요.



(▲이펙트들을 생성)


main1 -> Objects -> Create Moving 액션을 삽입합니다.


     object : obj_effect1
     x : 0
     y : 0
     speed : 2
     direction : i
     [V]Relative


이것은 이펙트를 (x,y)좌표에 생성후, i방향으로 2속도로 이동하게 하는 것입니다.


다음은 방향을 결정할 변수(i)값을 조절합니다.



(▲이펙트들의 방향을 조절함)


control -> Variables -> Set Variable 액션을 삽입하고


     variable : i
     value : 360/8
     [V]Relative


그러니까 이것은 8번동안 방향을 360/8각도로 움직이며 이펙트들를 줄줄이 발사한다고 볼 수 있습니다.

다음은 해골 이펙트를 발사해야 겠지요.



(▲해골 이펙트 생성)


main1 -> Objects -> Create Moving 액션을 삽입합니다.


     object : obj_effect2
     x : 0
     y : 0
     speed : 1
     direction : 90
     [V]Relative


방향을 위쪽으로 이동하게 하려고 하니, 90으로 하면 됩니다.

그리고 main1 -> Objects -> Destroy Instance 액션을 삽입하여 필요없어진 이 생성기를 파기하도록 합니다.



obj_effect1 : 빨간 원형 이펙트
obj_effect2 : 해골 이펙트
obj_ef_creator : 이펙트 생성기


이제 이 생성기 오브젝트를 트랩과의 충돌 이벤트에 삽입하도록 합시다.



(▲이펙트들 생성은 파기 액션 바로 위에 삽입함)


파기 액션 바로 위에 main1 -> Objects -> Create Instance 액션을 삽입합니다.


     object : obj_ef_creator
     x : 0
     y : 0
     [V]Relative






◈클리어 지점



다음은 클리어 지점을 만들어 봅시다.




(▲클리어 지점)


이 클리어 지점에 플레이어가 닿게 되면 '클리어!'라는 문구를 띄우고, 다음 룸으로 넘어가도록

구성해봅시다.



(▲클리어 이미지)


먼저 클리어 지점으로 사용할 오브젝트(obj_goal)를 하나 만듭니다.

그리고 클리어 문구를 띄울 오브젝트를 만듭니다.



(▲오브젝트들)


다음은 클리어 지점오브젝트로 가서 플레이어와의 충돌이벤트를 추가합니다.



(▲플레이어와의 충돌 이벤트, 클리어 문구를 띄움)


main1 -> Objects -> Create Instance 액션을 삽입하고 클리어문구를 생성합니다.


     object : obj_clear
     x : 0
     y : 0


그리고 main1 -> Objects -> Destroy Instance 액션을 삽입하여 플레이어를 파기하도록 합니다.
파기 액 Applise toother로 지정해야합니다.
그래야 충돌 상대인 플레이어를 파기할 수 있습니다.

다음은 클리어 문구 오브젝트로 가서 약간의 딜레이를 주기 위해 알람값을 설정합니다.


Create이벤트를 추가하고 main2 -> Timing -> Set Alarm 액을 삽입하고,


     number of steps : 120
     in alarm no : Alarm 0




(▲문구를 몇초간 띄우고 다음 룸으로 이동)


그리고 Alarm 이벤트(Alarm0)를 추가하고, main1 -> Rooms -> Next Room액션을 삽입합니다.



(▲Draw이벤트)


다음은 Draw이벤트를 추가하고 클리어 이미지를 표시하도록 합니다.
draw -> Drawing -> Draw Sprite액션을 추가하고


     sprite : spr_clear
     x : view_xview+(view_wview/2)
     y : view_yview+(view_hview/2)
     subimage : 0


이것은 비교적 큰 룸일 경우 뷰 화면에 맞추기 위해 설정하는 것입니다.





-------응용예제------



platform-2-액션.gmk


platform-2-액션.exe







300x250

댓글