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

[게임메이커강좌-플랫폼]간단한 플래폼게임 만들기-5-파트2-점프 높이 조절

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



GAME MAKER 강좌



KAYAN





이번 강좌에선 강좌 4 에서 만들었던 게임을 토대로 점프 키를 누름에 따라 점프하는 높이가 달라지는 기능을

만들어 보도록 해요.



(▲키를 눌렀을 때 어느정도 눌렀냐에 따라 점프의 높이가 달라짐)








◈점프 높이 조절(obj_player)



키를 누름에 따라 달라지는 점프는 어떻게 해야 만들 수 있을 까요?
이것은 강좌 5 파트 1 의 더블점프 강좌와 같이 스위치 변수를 이용하면 간단하게 해결 할 수 있습니다.



(▲ 점프 하기 전)


처음에는 스위치를 0으로 하지요.
이때, 플레이어는 Solid 블럭에 착지한 상태가 되어야 합니다.
일단 점프를 할때도 어느정도의 높이 까지만 뛰어야 겠지요.
그리고 키를 누르고 있을 때, 스위치는 1로 만들고, 점프 속도가 최대가 될때까지 점프의 양(속도)

증가 시킵니다.



(▲ 점프를 약간만 뜀)


점프 속도가 증가되기전에 키를 눌렀다 떼면, 키는 다시 점프를 뛸 수 있도록 스위치 변수를

초기화합니다.
만약 키를 계속 누르게 되면?



(▲ 점프를 최대로 뜀)


위와 같이 점프를 최대 속도만큼 뛰게 됩니다.
하지만, 점프 중일때 블럭이 위에 닿게 되면, 키를 놓을 때까지 멈춘 상태가 되버립니다.

왜냐하면 키 입력을 계속 받아서 속도가 줄지 않기 때문입니다.
그래서 점프 중 블럭에 닿았을때는 스위치를 0으로 만들어 더 이상 키 입력을 받지않도록 해야합니다.
그러면 점프 중일때, 점프를 더 이상 증가시키지 못해 아래로 낙하하게 되지요.
이러면 완성되는 것입니다.

이제 이것을 토대로 이벤트를 작성해볼까요.
먼저, 스위치용으로 사용할 변수를 플레이어 오브젝트(obj_player)Create이벤트에 선언하도록 해요.



(▲점프 스위치 변수)


ControlVariablesSet Variable 액션으로 변수를 선언합니다.
강좌에선 pow_jump를 스위치 변수로 선언했습니다.



     ★ obj_player - Create 이벤트

     //Set Variable 액션

     variable : pow_jump
     value : 0



다음은 키를 눌렀을 때 점프의 양을 조절해야겠지요.
이것은 이벤트 메뉴에서 Keyboard 이벤트(키를 누르고 있을때)를 이용해야합니다.
강좌에선 점프키를 [Space]키로 하겠습니다.
[Space]키를 누르고 있을때 아무때나 점프하면 안되기 때문에, 점프를 시작할때의 조건을 먼저

이벤트에 추가해야 합니다.


(▲점프시작 조건)


이때는 Solid 블럭에 플레이어가 착지한 상태여야 겠지요.
ControlQuestionsCheck Empty 액션을 추가하고, Solid 블럭을 체크하게 합니다.



     ★ obj_player - [Space]키를 누르고 있을 때 이벤트

     //Check Empty 액션

     x : 0
     y : 1
     [V]Relative [V]NOT



그리고 스위치 변수를 1로 만들어야 합니다.
Start 블럭을 추가하고, ControlVariablesSet Variable 액션으로 점프 스위치 변수를 1로

만듭니다.



     ★ obj_player - [Space]키를 누르고 있을 때 이벤트

     //Set Variable 액션

     variable : pow_jump
     value : 1



End 블럭을 추가해 이제 조건문을 닫습니다.
다음은 스위치가 1일때 점프 속도를 증가시키는 이벤트를 추가해야합니다.



(▲스위치 변수가 1일때, 점프)


먼저 ControlVariablesTest Variable 액션으로 점프 속도에 대한 조건문을 작성해야합니다.



     ★ obj_player - [Space]키를 누르고 있을 때 이벤트

     //Test Variable 액션

     variable : pow_jump
     value : 1
     operation : equal to



즉, 스위치가 1일때 속도를 증가시킬 수 있다는 것이죠.

그리고 속도를 어느정도까지 증가시킬 수 있는지에 대한 조건이 필요합니다.
ControlVariablesTest Variable 액션으로 점프 속도 제한에 대한 조건문을 작성해야합니다.



(▲속도 제한)



     ★ obj_player - [Space]키를 누르고 있을 때 이벤트

     //Test Variable 액션

     variable : vspeed
     value : -8
     operation : larger than



vspeed는 음수 일때 위로 향하고, 양수 일땐 아래로 향하죠.
그렇기 때문에 점프를 해야하니 음수로 해야하고 조건은 클때, 즉, vspeed가 -8보다 클때 속도를

증가 시킬 수 있다는 것입니다.

이제 속도를 증가 시켜야 합니다.
Start 블럭을 추가하고, MoveMoveSpeed Vertical 액션으로 속도를 증가시키도록 합니다.



(▲속도 증가)



     ★ obj_player - [Space]키를 누르고 있을 때 이벤트

     //Speed Vertical 액션

     vert. speed : -1
     [V]Relative



이렇게 하면 키를 누르고 있을 때, 제한 속도가 될때까지 속도가 증가하게 됩니다.

이제 제한 속도가 되었을 때 더 이상 속도를 증가 시키지 못하도록 스위치 변수를 초기화해야합니다.
End 블럭을 추가해 이전 조건문은 닫고, vspeed에 반대되는 ControlOtherElse 액션

추가합니다.
Start 블럭을 추가하고, ControlVariablesSet Variable 액션으로 스위치 변수를 초기화합니다.



(▲스위치 초기화)



     ★ obj_player - [Space]키를 누르고 있을 때 이벤트

     //Set Variable 액션

     variable : pow_jump
     value : 0



다음은 점프 키를 눌렀다 떼었을때의 이벤트가 필요합니다.
이때도 역시 스위치 변수를 초기화해야 더 이상 점프하지 않겠지요.
이벤트 메뉴Key Release[Space]키 이벤트를 추가합니다.
ControlVariablesSet Variable 액션으로 스위치 변수를 초기화합니다.



(▲ 점프 키를 눌렀다 떼었을때)



     ★ obj_player - [Space]키를 누르고 있을 때 이벤트

     //Set Variable 액션

     variable : pow_jump
     value : 0



이제 키에 대한 설정은 끝났습니다.
하지만, 아래와 같이



(▲키를 누르고 있을때, 블럭이 위에 닿게 되면 멈춤)


키를 누르고 있을때, 블럭이 위에 닿게 되어도 키 입력을 계속 받는 상태가 됩니다.

(스위치가 1일때, 최대 속도가 될때까지 속도는 계속 증가. 하지만 블럭 때문에 최대 속도가 되지 못함)

결국 속도는 계속 증가하려 하지만, 블럭에 닿은 상태라 멈춘 상태가 되어버리는 것이지요.


그래서 플레이어 오브젝트(obj_player)블럭 오브젝트(obj_block)와의 충돌 이벤트에, 이것에 대한

방지 이벤트를 추가해야합니다.

일단 중력 설정부터 다시 해봅시다.
MoveJumpMove to Contact 액션을 추가하고 블럭에 direction방향에 붙여줍니다.



     ★ obj_player - obj_block과의 충돌 이벤트

     //Move to Contact 액션

     direction : direction
     maximum : 8
     against : solid objects



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



     ★ obj_player - obj_block과의 충돌 이벤트

     //Speed Vertical 액션

     vert. speed : 0



이제 점프 키에 대한 설정입니다.
블럭에 닿았을 때 스위치 변수를 0으로 만들도록 해요.
ControlQuestionsCheck Empty 액션을 추가하고, Solid 블럭을 체크하게 합니다.



(▲ 점프 중에 블럭과 닿았을 때)



     ★ obj_player - obj_block과의 충돌 이벤트

     //Check Empty 액션

     x : 0
     y : 1
     [V]Relative



이것은 플레이어가 공중에 있을때, 아래에 Solid블럭이 없는지 체크하는 것입니다.
즉, 위에 Solid블럭에 닿게 되었을때, 지금 점프 중인가를 체크해서, 아래에 Solid블럭도 없고 점프 중이라면
점프 스위치 변수를 초기화하여, 더 이상 점프를 뛰지 못하게 만드는 것이죠.

그리고 Start 블럭을 추가하고, ControlVariablesSet Variable 액션으로 스위치 변수를 초기화합니다.



     ★ obj_player - obj_block과의 충돌 이벤트

     //Set Variable 액션

     variable : pow_jump
     value : 0



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



(▲테스트 화면)





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


platform-5-1액션(강약점프).gmk


platform-5-1액션(강약점프).exe



300x250

댓글