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

[게임메이커강좌-플랫폼]간단한 플래폼게임 만들기-5-파트4-벽타기

by 타락카얀 2013. 10. 29.
728x90



GAME MAKER 강좌



KAYAN



이번 강좌에선 5-파트3-하강속도 감소(http://kayanworld.tistory.com/99)에서 만들었던 게임을 토대로
플레이어가 벽을 타며 올라가는 방법에 대해 알아보도록 합시다.



(▲벽타기)










◈벽타기



먼저 벽타기를 어떻게 구성할 것인지 생각해봅시다.



(▲준비상태)


일단 준비 상태에서 점프키를 누르면 점프를 하지요.



(▲벽에 닿을때 점프키를 누르면 다시 점프)


그리고 이전 강좌를 토대로 만들 것이기 때문에 벽에 닿는다면 속도는 약간 감소 될 것입니다.
이 상태에서 점프 키를 누르면 약간 뒤로 말려나면서 위로 이동하게 합니다.
점프 간격에는 약간의 딜레이가 조금 있어야 자연스러워지겠지요.
딜레이 시간이 없다면 뭔가 '후다다닥' 하는 느낌으로 바로 올라가 버릴 것입니다.
그래서 딜레이 시간이 지난 후에 키입력을 받게 하여, 재 점프를 할 수 있게 하는 것이죠.

이제 이벤트를 한번 작성해보도록 합시다.
먼저 플레이어 오브젝트(obj_player)Create 이벤트에 딜레이 사용을 위해 변수를 선언하도록 해요.



(▲딜레이 변수)


ControlVariablesSet Variable 액션을 사용하여 변수를 선언합시다.



     ★ obj_player - Create 이벤트
     // Set Variable 액션

     variable : key_delay
     value : 0



이제 점프키에 대한 설정입니다.
이 점프키는 키를 한번 눌렀을 때 반응하게 해야합니다.
이벤트 메뉴Key Press 이벤트사용할 점프 키(강좌에서는 [Space]키) 이벤트로 변경합시다.

이전에 만든 점프 이벤트를 다시 검토해볼까요.



(▲이전 강좌의 점프 이벤트)


먼저 플레이어 아래쪽에 솔리드 오브젝트가 있는지 체크해야하죠.



     ★ obj_player - [Space]키를 눌렀을때
     // Check Empty 액션

     x : 0
     y : 1
     objects : Only solid

     [V] Relative     [V] NOT



그리고 vspeed를 이용해 위로 점프를 시키는 것입니다.



     ★ obj_player - [Space]키를 눌렀을때
     // Speed Vertical 액션

     vert.speed : -8



이제 벽타기 조건입니다.
먼저 딜레이 시간을 체크해야겠지요.
ControlVariablesTest Variable 액션을 이용해 딜레이가 0일때 재 점프하도록 합니다.



     ★ obj_player - [Space]키를 눌렀을때
     // Test Variable 액션

     variable : key_delay
     value : 0
     operation : equal to



ControlOther Start Block을 추가하고, 방향(xdir, -1이 왼족, 1이 오른쪽)이 어느쪽인지 체크해야합니다.
왼쪽 이벤트를 먼저 작성해볼까요.
Control Variables Test Variable 액션을 이용해 조건문을 추가합시다.



     ★ obj_player - [Space]키를 눌렀을때
     // Test Variable 액션

     variable : xdir
     value : -1
     operation : equal to



Control Other Start Block을 추가하고, 벽(solid)의 방향이 왼쪽 방향에 있는지 체크해야겠지요.
Control Questions Check Empty 액션을 이용해 조건문을 추가합시다.



     ★ obj_player - [Space]키를 눌렀을때
     // Check Empty 액션

     x : -2
     y : 0
     objects : Only solid

     [V] Relative     [V] NOT



이제 위로 이동시켜야 합니다.
Control Other Start Block을 추가하고, Move Move Speed Vertical 액션을 이용해 점프를 합니다.



     ★ obj_player - [Space]키를 눌렀을때
     // Speed Vertical 액션

     vert.speed : -5



다음은 약간 뒤로 밀려나게 할까요.
Move Jump Jump to position 액션을 이용해 점프를 합니다.



     ★ obj_player - [Space]키를 눌렀을때
     // Jump to position 액션

     x : 8*place_free(x+8,y)
     y : 0

     [V] Relative



이렇게 하면 현재 방향에 반대방향으로 약간 이동하게 됩니다.
물론 뒤의 방향에 Solid오브젝트에 닿게 된다면 멈추겠지요.
점프가 끝났으니, 재 점프를 위해 약간의 딜레이를 줍니다.
Control Variables Set Variable 액션을 사용하여 딜레이 시간을 변수를 통해 설정합니다.



     ★ obj_player - [Space]키를 눌렀을때
     // Set Variable 액션

     variable : key_delay
     value : 20



Control Other End Block을 추가하고, 오른쪽 방향일때의 이벤트도 작성하도록 합시다.



(▲이벤트)


Control Other Else를 추가합니다.
그리고 ControlOther Start Block을 추가하고, 오른쪽 방향에 벽(solid)이 있는지 체크하도록 합시다.
Control Questions Check Empty 액션을 이용해 조건문을 추가합시다.



     ★ obj_player - [Space]키를 눌렀을때
     // Check Empty 액션

     x : 2
     y : 0
     objects : Only solid

     [V] Relative     [V] NOT



이제 위로 이동시켜야 합니다.
Control Other Start Block을 추가하고, Move Move Speed Vertical 액션을 이용해 점프를 합니다.



     ★ obj_player - [Space]키를 눌렀을때
     // Speed Vertical 액션

     vert.speed : -5



왼쪽과 같이 약간 뒤로 밀려나게 합시다.
Move Jump Jump to position 액션을 이용해 점프를 합니다.



     ★ obj_player - [Space]키를 눌렀을때
     // Jump to position 액션

     x : 8*place_free(x-8,y)
     y : 0

     [V] Relative



이렇게 하면 현재 방향에 반대방향으로 약간 이동하게 됩니다.
물론 뒤의 방향에 Solid 오브젝트에 닿게 된다면 멈추겠지요.
점프가 끝났으니, 재 점프를 위해 약간의 딜레이를 줍니다.
ControlVariablesSet Variable 액션을 사용하여 딜레이 시간을 변수를 통해 설정합니다.



     ★ obj_player - [Space]키를 눌렀을때
     // Set Variable 액션

     variable : key_delay
     value : 20




(▲점프 이벤트)


이제 딜레이 시간을 처리하는 이벤트가 필요합니다.
End Step 이벤트를 추가하고, 딜레이 감소 이벤트를 작성하도록 합니다.

ControlVariablesTest Variable 액션을 이용해 조건문을 추가합시다.



     ★ obj_player - End Step 이벤트
     // Test Variable 액션

     variable : key_delay
     value : 0
     operation : larger than



Control Variables Set Variable 액션을 사용하여 딜레이 시간을 -1씩 감소시킵니다.



     ★ obj_player - End Step 이벤트
     // Set Variable 액션

     variable : key_delay
     value : -1


     [V] Relative



음수가 나올 수 있으니 0으로 만들어야겠지요.
ControlOther Else를 추가하고, Control Variables Set Variable 액션을 사용하여 딜레이

시간을 감소시키다가 음수가 나오면 0으로 만듭니다.



     ★ obj_player - End Step 이벤트
     // Set Variable 액션

     variable : key_delay
     value : 0



다음은 블럭에 착지했을때 딜레이 시간을 초기화 해야합니다.
일단 블럭에 충돌했을때 이벤트를 다시 점검해보도록 합시다.
Move Jump Move to Contact 액션을 추가하고 블럭에 direction방향에 붙여줍니다.



     ★ obj_player - obj_block과의 충돌 이벤트
     //Move to Contact 액션

     direction : direction
     maximum : 8
     against : solid objects



다음은 Move Move Speed Vertical 액션을 추가하고, 떨어지는 속도를 정지시킵니다.



     ★ obj_player - obj_block과의 충돌 이벤트
     //Speed Vertical 액션

     vert. speed : 0



이제 Control Questions Check Empty 액션을 이용해 플레이어 아래쪽에 Solid 오브젝트가 있는지

체크하도록 합니다.



     ★ obj_player - obj_block과의 충돌 이벤트
     // Check Empty 액션

     x : 2
     y : 0
     objects : Only solid

     [V] Relative     [V] NOT



그리고 ControlVariables Set Variable 액션을 사용하여 딜레이 시간을 초기화 하도록 합니다.



     ★ obj_player - obj_block과의 충돌 이벤트
     // Set Variable 액션

     variable : key_delay
     value : 0



오오~ 거의 끝나가는 군요.
하지만 뱡향키에 대한 설정이 남았습니다.
딜레이 시간이 0일때 이동하게 해야하지요. 먼저 왼쪽 키에 조건을 추가하도록 해요.



(▲왼쪽 이동 조건 추가)


ControlVariables Test Variable 액션을 이용하여 이동 이벤트 앞에 조건문을 추가합니다.



     ★ obj_player - [Left] 키를 누르고 있을때
     // Test Variable 액션

     variable : key_delay
     value : 0
     operation : equal to



이렇게 하면 딜레이가 0일때 이동을 시킬 수 있겠죠.

오른쪽키 이벤트도 같은 방법으로 추가하도록 해요.



(▲오른쪽 이동 조건 추가)


Control Variables Test Variable 액션을 이용하여 이동 이벤트 앞에 조건문을 추가해요.



     ★ obj_player - [Right] 키를 누르고 있을때
     // Test Variable 액션

     variable : key_delay
     value : 0
     operation : equal to



와우~! 드디어 완성되었습니다.
제대로 되는지 테스트해보도록 해요.



(▲테스트 화면)






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



platform-5-3액션(벽타기).gmk


platform-5-3액션(벽타기).exe




300x250

댓글