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

[게임메이커강좌-플랫폼]간단한 플래폼게임 만들기-5-파트3-하강속도 감소

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



GAME MAKER 강좌



KAYAN




이번 강좌에선 강좌4(http://kayanworld.tistory.com/55)에서 만들었던 게임을 토대로 점프시 벽에

닿았을 때 하강속도를 감소시키는 방법에 대해 알아보도록 합시다.



(▲벽에 닿으면 하강 속도가 감소)










◈하강속도 감소시키기



점프를 뛰었다가 벽에 닿았을 때 속도를 어떻게 감소시킬 수 있을까요?



(▲벽에 닿았을때)


점프중일 때 이동 키를 눌러 벽에 닿았을때, 속도는 줄어 들게 해야합니다.
상승중일때는 점점 속도를 줄이고, 아래로 하강 중일 때는 일정한 저속으로 하강합니다.
만약 키를 누르지 않는다면, 줄어든 속도가 아니라 중력 설정대로 하강하게 되지요.

이 설정은 플레이어의 키 이벤트에서 설정하면 됩니다.
일단 이동 키에 대해 다시 한번 점검해보도록 합시다.



(▲왼쪽 이동 설정)


ControlQuestionsCheck Empty 액션으로 먼저 왼쪽 이동 방향에 솔리드 오브젝트가 있는지

체크합니다.



     ★ obj_player - Left 키를 누르고 있을때
     // Check Empty 액션

     x : -2
     y : 0
     objects : Only solid

     [V] Relative



이것은 솔리드 오브젝트가 없을때, 이벤트가 실행되게 하는 것입니다.

그리고 플레이어를 이동 시켜야겠지요.
MoveJumpJump to position 액션으로 이동시킵니다.



     ★ obj_player - Left 키를 누르고 있을때
     // Jump to position 액션

     x : -2
     y : 0

     [V] Relative



그리고 이동 애니메이션 설정을 위해 이동 중인지 변수로 체크하게 합니다.
ControlVariableSet Variable 액션으로 이동 변수를 1로 만듭니다(멈추었을때는 0).



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

     variable : move
     value : 1



다음은 방향에 대한 설정이 필요하겠죠.
이 방향은 플레이어의 스프라이트 이미지를 반대쪽으로 변형시키는 기능을 했었지요.
ControlVariableSet Variable 액션으로 방향 변수를 -1로 만듭니다(오른쪽은 1).



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

     variable : xdir
     value : -1



이제 하강 속도를 줄이는 이벤트입니다.
이동은 솔리드 오브젝트가 없을때만 이동 시켰지만, 이번에는 솔리드 오브젝트가 있을때 이벤트를 발생시켜야

합니다. 그래야 계획대로 벽에 닿았을 때 속도를 줄일 수 있겠지요.
ControlQuestionsCheck Empty 액션으로 왼쪽 이동 방향에 솔리드 오브젝트가 있는지 체크합니다.



(▲솔리드 오브젝트가 있는지 체크)


 

     ★ obj_player - Left 키를 누르고 있을때
     // Check Empty 액션

     x : -2
     y : 0
     objects : Only solid

     [V] Relative     [V]Not



이것은 이동방향에 솔리드 오브젝트가 있을때, 이벤트를 실행시키는 것입니다.

다음은 정프 중인지 알 필요가 있습니다.
강좌에선 점프 중일 때 변수로 설정하게 했었지요(강좌에선 jump 변수, 1이면 점프 0이면 점프 안함).
ControlOtherStart block 을 추가하고, ControlVariableTest Variable 액션으로

점프중인지 체크합니다.



(▲점프 중인지 체크)



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

     variable : jump
     value : 1
     operation : equal to



이제 vspeed를 통해 속도를 줄여야 합니다.
먼저 상승 중일때 속도를 줄여야 겠지요.
ControlOtherStart block 을 추가하고, ControlVariableTest Variable 액션으로

상승중인지 체크합니다.



(▲상승 중인지 체크)



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

     variable : vspeed
     value : 0
     operation : smaller than



vspeed는 음수(-)가 위쪽, 양수(+)가 아래쪽이지요.
즉, vspeed가 음수일떄, 속도를 점점 줄이게(아래로 향하게 해야하기 때문에 속도를 양수로 만듦) 하는 것입니다.
MoveMoveSpeed Vertical 액션을 추가하고, 속도를 점점 줄이게 합니다.



(▲속도를 점점 줄임)



     ★ obj_player - Left 키를 누르고 있을때
     // Speed Vertical 액션

     vert. speed : 0.3

     [V] Relative



하강중 일때는 속도를 일정하게 할 필요가 있겠지요.
ControlOtherElse 을 추가하고, MoveMoveSpeed Vertical 액션을 추가해 일정한

저속으로 하강하게 합니다.



(▲일정한 속도로 하강하게 함)



     ★ obj_player - Left 키를 누르고 있을때
     // Speed Vertical 액션

     vert. speed : 1

     [V] Relative



왼쪽 키에 대한 설정이 끝났습니다.



(▲왼쪽 키 이벤트)


다음은 왼쪽 키 이벤트를 응용해서 오른쪽 키 이벤트도 설정해 봅시다.
일단 오른쪽 이동 이벤트 먼저 점검해봅시다.



(▲오른쪽 이동 설정)


ControlQuestionsCheck Empty 액션으로 오른쪽 이동 방향에 솔리드 오브젝트가 있는지 체크합니다.



     ★ obj_player - Right 키를 누르고 있을때
     // Check Empty 액션

     x : 2
     y : 0
     objects : Only solid

     [V] Relative



이것은 솔리드 오브젝트가 없을때, 이벤트가 실행되게 하는 것입니다.

그리고 플레이어를 이동 시켜야겠지요.
MoveJumpJump to position 액션으로 이동시킵니다.



     ★ obj_player - Right 키를 누르고 있을때
     // Jump to position 액션

     x : 2
     y : 0

     [V] Relative



그리고 이동 애니메이션 설정을 위해 이동 중인지 변수로 체크하게 합니다.
ControlVariableSet Variable 액션으로 이동 변수를 1로 만듭니다(멈추었을때는 0).



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

     variable : move
     value : 1



다음은 방향에 대한 설정이 필요하겠죠.
이 방향은 플레이어의 스프라이트 이미지를 반대쪽으로 변형시키는 기능을 했었지요.
ControlVariableSet Variable 액션으로 방향 변수를 1로 만듭니다(왼쪽은 -1).


 

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

     variable : xdir
     value : 1



이제 하강 속도를 줄이는 이벤트입니다.
왼쪽 키에서 설정한 것과 같이 솔리드 오브젝트가 있을때 이벤트를 발생시켜야 합니다.
그래야 계획대로 벽에 닿았을 때 속도를 줄일 수 있겠지요.
ControlQuestionsCheck Empty 액션으로 오른쪽 방향에 솔리드 오브젝트가 있는지 체크합니다.



     ★ obj_player - Right 키를 누르고 있을때
     // Check Empty 액션

     x : 2
     y : 0
     objects : Only solid

     [V] Relative     [V]Not



이것은 이동방향에 솔리드 오브젝트가 있을때, 이벤트를 실행시키는 것입니다.

다음은 정프 중인지 알 필요가 있습니다.
강좌에선 점프 중일 때 변수로 설정하게 했었지요(강좌에선 jump 변수, 1이면 점프 0이면 점프 안함).
Control Other Start block 을 추가하고, Control Variable Test Variable 액션으로 점프중인지

체크합니다.



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

     variable : jump
     value : 1
     operation : equal to



이제 vspeed를 이용해 상승 중일때 속도를 줄여야 겠지요.
먼저 Control Other Start block 을 추가하고, Control Variable Test Variable 액션으로

상승중인지 체크합니다.



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

     variable : vspeed
     value : 0
     operation : smaller than



vspeed는 음수(-)가 위쪽, 양수(+)가 아래쪽이지요.
Move Move Speed Vertical 액션을 추가하고, 속도를 점점 줄이게 합니다.



     ★ obj_player - Right 키를 누르고 있을때
     // Speed Vertical 액션

     vert. speed : 0.3

     [V] Relative



하강중 일때는 속도를 일정하게 할 필요가 있겠지요.
Control Other Else 을 추가하고, Move Move Speed Vertical 액션을 추가해 일정한 저속으로

하강하게 합니다.



     ★ obj_player - Right 키를 누르고 있을때
     // Speed Vertical 액션

     vert. speed : 1

     [V] Relative




(▲오른쪽 키 이벤트)


모든 설정이 끝났네요.
제대로 되는지 테스트 해보도록 해요.



(▲테스트 화면)


이번 강좌는 간단했죠?
응용하는 것을 복잡하게 생각하기 보단, 어떻게 작동하게 할지, 단계별로 원리를 생각하다보면,
구현하기가 좀 더 수월하답니다.





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


platform-5-2액션(하강속도 감소).gmk


platform-5-2액션(하강속도 감소).exe



300x250

댓글