본문 바로가기
GameMaker강좌[GMS2]/DnD강좌-게임

[게임메이커 강좌-DnD][GMS2]플랫포머 게임 만들기-11 : 상하 이동하는 이동 블록(완)

by 타락카얀 2021. 3. 3.
728x90

 

 

GAME MAKER 강좌

 

 

KAYAN


 

 

 

 

 

◈ 상하 이동하는 이동 블록

 

이번에는 상하 이동하는 블록을 만들어 봅시다.

 

(▲ 상하 이동하는 이동 블록)

 

오브젝트를 하나 추가하고, 블록 이미지를 지정합니다.

그리고 solid 를 체크합니다.

이름은... obj_block_solid_move_v 로 하겠습니다.

 

(▲ 상하 이동하는 이동 블록)

 

좌우 이동하는 블록과 마찬가지로 부모 오브젝트에 이전에 만든 바닥 오브젝트(obj_block)

지정합니다.

 

(▲ 부모 오브젝트 지정)

 

Create 이벤트를 추가하고 속도를 정의합니다.

 

(▲ Create 이벤트)

 

오브젝트에 End Step 이벤트를 추가합니다.

그리고 Common[Apply To] 액션을 추가합니다.

 

(▲ End Step 이벤트)

 

[Apply To] 액션[▼]버튼을 클릭하고, 플레이어 오브젝트의 부모 오브젝트(obj_allunit)를 선택합니다.

 

(▲ [Apply To] 액션에 플레이어 부모 오브젝트를 지정)

 

이렇게 하면 이 액션에 연결된 이벤트는 현재 이동 블록 오브젝트가 아닌 플레이어 부모 오브젝트에서

실행됩니다.

 

Collision[If Object At Place] 조건문 액션을 추가하고 오브젝트에 현재 블록 오브젝트를

지칭하는 other. id 를 지정합니다.

 

(▲ 충돌 체크)

 

이것은 플레이어 오브젝트 밑(x, y+abs(other.pspeed))에 상하로 이동중인 이동 블럭이 있을 때

실행되도록 하는 조건문입니다.

 

다음은 Movement[Jump To Point] 액션을 사용하여 이 이동 블럭 위에 있는 플레이어 오브젝트를

상하 이동 방향으로 동일하게 이동시킵니다.

 

(▲ 플레이어가 이동 블록에 착지했을 때)

 

다음 플레이어가 이동 블록 밑에 닿았을 때 상황을 구성해야 합니다.

먼저 Collision[If Object At Place] 조건문 액션을 추가하고 속도를 체크합니다.

0보다 크면 아래로 이동하고, 작으면 위로 이동합니다.

우리가 체크하려는 것은 아래로 이동할 때, 그 밑에 플레이어가 있을 때 입니다.

 

(▲ 이동 블록의 속도 체크)

 

Collision[If Object At Place] 조건문 액션을 추가하고, 플레이어 위의 이동 블록

이동방향(x, y-abs(other.pspeed))충돌하는 지를 체크합니다.

 

(▲ 이동 블록 이동 방향에 플레이어가 있을 때)

 

그리고 [If Expression] 조건문 액션을 추가하고 플레이어 아래 위치에 Solid 오브젝트가 없는지

체크합니다.

 

(▲ 플레이어 아래 Solid 오브젝트 체크)

 

다음은 [Function Call] 액션을 추가하고, move_contact_solid 함수를 사용하여 플레이어

아래쪽으로 이동 시킵니다.

 

(▲ 플레이어 아래쪽으로 이동)

 

즉, 플레이어가 점프를 하거나 특정 상황에 이동 블록 밑에 닿아 있을 때, 플레이어가 블록에

끼이지 않도록 아래로 이동 블록 속도만큼 이동 시키는 것입니다.

 

그리고 [If Expression] 조건문 액션을 추가하고 플레이어 밑에 Solid 오브젝트가 있는지 체크합니다.

이동 블럭이 플레이어를 더이상 밀어낼 수 없는 위치에 있다면, 다시 반대 방향으로 이동 시킵니다.

 

(▲ 이동 블록을 반대 방향으로 이동)

 

(▲ 이동 블록을 반대 방향으로 이동)

 

여기까지는 이동 블록에 착지한 플레이어 오브젝트를 제어하는 이벤트였습니다.

 

마지막으로 [Jump To Point] 액션을 사용하여 속도 변수에 따라 현재 이동 블록을 이동 시키면 됩니다.

 

(▲ 현재 이동 블록 이동)

 

다음은 현재 이동 블록 오브젝트의 부모 오브젝트인 solid 오브젝트와 충돌 이벤트를 추가합니다.

 

(▲ solid 오브젝트와의 충돌 이벤트)

 

그리고 [Assign Variable] 액션을 추가하고, 속도를 반대로 설정합니다.

 

(▲ 속도를 반대로 설정)

 

이전에 만든 좌우 이동 블록과 마찬가지로 일부 이동 구간을 지정해봅시다.

 

(▲ 좌우 이동 블록과 마찬가지로 이동 구간을 지정)

 

이동 블록에 유턴 오브젝트(obj_reverse)와의 충돌 이벤트를 추가합니다.

 

(▲ 유턴 오브젝트와의 충돌 이벤트 추가)

 

그리고 [Assign Variable] 액션을 추가하고, 속도를 반대로 설정합니다.

 

(▲ 속도를 반대로 설정)

 

이동 블록이 완성되었습니다.

룸의 인스턴스 레이어에 이동 블록을 배치합니다.

 

(▲ 이동 블록 배치)

 

잘 작동하는지 테스트해봅시다.

 

(▲ 테스트 화면)

 

휴~ 여기까지 잘 따라와 주셔서 감사합니다.

긴 강좌에 별 내용도 없었는데, 유익하셨는지 모르겠군요.

강좌는 플랫포머 게임에 필요한 단순 기능만 담았습니다.

응용하기에 따라서 여러분들은 더 멋진 게임을 만드실 수 있을 거라 생각됩니다.

 

 

 

 

- 끝 -

 

 

 

ex_platformer_dnd_1.yyz
0.13MB

 

ex_platformer_dnd_1.zip
1.97MB

 

 

 

 

 

 

 

300x250

댓글