GAME MAKER 강좌
KAYAN
◈ 좌우 이동하는 이동 블록
플레이어가 올라 탈 수 있는 이동블록을 만들어 봅시다.
이번 강좌는 조금 복잡할 수 있습니다.
(▲ 이동 블록)
강좌에서 만들 이동 블럭은 플레이어가 점프를 하여, 이동블럭에 올라타면 일반 바닥에
착지하는 것처럼 중력을 멈추고 블록이 좌우로 이동하는 대로 플레이어도 같은 방향으로
이동하게 됩니다.
(▲ 이동 블록)
먼저 블록에 대한 이미지를 스프라이트 이미지로 추가합니다.
(▲ 스프라이트 이미지)
오브젝트를 추가하고 이동 블록 이미지를 지정합니다.
이름은 obj_block_solid_move_h 로 하겠습니다.
음. 쓰고나니 이름이 기네요.
여러분은 짧은 이름으로 구성하세요.
오브젝트의 Solid 를 체크하도록 합니다.
(▲ 오브젝트)
그리고 부모 오브젝트로 이전에 만든 바닥 오브젝트(obj_block)을 지정합니다.
(▲ 부모 오브젝트 지정)
Create 이벤트를 추가하고 [Assign Variable] 액션을 사용하여 속도에 대한 변수를 정의 합니다.
이 변수는 좌우로 이동하는데 쓰일 것입니다.
(▲ Create 이벤트)
Step 이벤트를 추가합니다.
Common ▶ [Apply To] 액션을 추가합니다.
[Apply To] 액션은 다른 오브젝트에서 이벤트를 발생시키기 위한 특수 액션입니다.
참고로 GML 에서는 with 문을 사용합니다.
(▲ Step 이벤트)
[Apply To] 액션의 [▼]버튼을 클릭하고, 플레이어 오브젝트의 부모 오브젝트(obj_allunit)를 선택합니다.
(▲ [Apply To] 액션에 플레이어 부모 오브젝트를 지정)
이렇게 하면 이 액션에 연결된 이벤트는 현재 이벤트를 구성중인 이동 블록 오브젝트가 아닌
플레이어 부모 오브젝트(obj_allunit)에서 실행됩니다.
Collision ▶ [If Object At Place] 조건문 액션을 추가하고 오브젝트에 현재 블록 오브젝트를
지칭하는 other.id 를 지정합니다.
※ [Apply To] 액션으로 실행되는 이벤트 내에서 other를 사용하면 [Apply To] 액션을 사용하는
오브젝트를 지칭하게 됩니다.
(▲ 충돌 체크)
이것은 플레이어 오브젝트 밑(x, y+1)에 현재 이동 블럭이 있을 때 실행되도록 하는 조건문입니다.
다음은 Movement ▶ [Jump To Point] 액션을 사용하여 이 이동 블럭 위에 있는 플레이어 오브젝트를
이동 방향으로 동일하게 이동시킵니다.
(▲ 플레이어가 이동 블록에 착지했을 때)
먼저, 이동 블록 이동 속도만큼 이동 시킵니다.
other.pspeed
그리고 이동 방향에 Solid 오브젝트가 없는지 체크하도록 조건문을 곱해줍니다.
other.pspeed * place_free(x + other.pspeed, y)
이와 같이 하면, Solid 오브젝트가 없을 때 조건문은 1(true)를 반환하여 속도x1 이므로
같은 방향으로 이동하게 됩니다.
반대로 Solid 오브젝트가 있다면 조건문은 0(false)를 반환하기 떄문에 속도x0 이므로
플레이어는 멈추게 됩니다.
즉, 플레이어 입장에서 블럭에 착지했을 때 이동 블록 오브젝트와의 동기화를 구성하는 것입니다.
다음 플레이어가 이동 블록 옆면에 닿았을 때 상황을 구성해야 합니다.
Collision ▶ [If Object At Place] 조건문 액션을 추가하고, 플레이어가 이동 블록
이동방향(-other.pspeed, y)과 충돌하는 지를 체크합니다.
이동 블록 이동 방향에 플레이어가 있다면 어떻게 해야 할까요?
플레이어를 이동 방향 쪽으로 밀어버려야겠죠.
(▲ 이동 블록 이동 방향에 플레이어가 있을 때)
Movement ▶ [Jump To Point] 액션을 추가하고, 이동 블록 이동 방향으로 플레이어를 이동 시킵니다.
(▲ 이동 블록 이동 방향에 플레이어가 있을 때)
다음은 아래와 같이 플레이어가 이동 블록과 다른 solid 블록 사이에 있을 때 상황입니다.
(▲ 플레이어가 이동 블록과 solid 블록 사이에 있을 때)
[If Expression] 액션을 추가하고, place_free 함수를 사용하여 플레이어 뒤에 solid 블록이
있는지 체크합니다.
만약 있다면 이동 블록의 속도에 -1값을 곱하여 반대 방향으로 이동 시킵니다.
(▲ 반대 방향으로 이동)
여기까지는 이동 블록에 착지한 플레이어 오브젝트를 제어하는 이벤트였습니다.
마지막으로 [Jump To Point] 액션을 사용하여 속도 변수에 따라 현재 이동 블록을
이동 시키면 됩니다.
(▲ 현재 이동 블록 이동)
다음은 현재 이동 블록 오브젝트의 부모 오브젝트인 solid 오브젝트와 충돌 이벤트를 추가합니다.
(▲ solid 오브젝트와의 충돌 이벤트)
그리고 [Assign Variable] 액션을 추가하고, 속도를 반대로 설정합니다.
(▲ 속도를 반대로 설정)
슬라임 오브젝트와 같이 일부 이동 구간을 지정해봅시다.
(▲ 슬라임 오브젝트의 이동 구간으로 사용한 유턴 오브젝트)
아래처럼 구간을 처리할 것입니다.
(▲ 이동 구간으로 지정)
이동 블록에 유턴 오브젝트(obj_reverse)와의 충돌 이벤트를 추가합니다.
(▲ 유턴 오브젝트와의 충돌 이벤트 추가)
그리고 [Assign Variable] 액션을 추가하고, 속도를 반대로 설정합니다.
(▲ 속도를 반대로 설정)
이동 블록이 완성되었습니다.
잘 작동하는지 테스트해봅시다.
- 계속 -
'GameMaker강좌[GMS2] > DnD강좌-게임' 카테고리의 다른 글
[게임메이커 강좌-DnD][GMS2]플랫포머 게임 만들기-11 : 상하 이동하는 이동 블록(완) (4) | 2021.03.03 |
---|---|
[게임메이커 강좌-DnD][GMS2]플랫포머 게임 만들기-9 : 다음 룸으로 이동 (0) | 2021.03.02 |
[게임메이커 강좌-DnD][GMS2]플랫포머 게임 만들기-8 : 트랩 만들기 (0) | 2021.03.02 |
[게임메이커 강좌-DnD][GMS2]플랫포머 게임 만들기-7 : 플레이어 데드라인 (0) | 2021.03.01 |
[게임메이커 강좌-DnD][GMS2]플랫포머 게임 만들기-6 : 플레이어의 점프공격 (0) | 2021.03.01 |
댓글