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

[게임메이커 강좌-DnD][GMS2]간단한 운석 피하기게임 만들기-5 : 게임 제어

by 타락카얀 2021. 2. 15.
728x90

 

 

GAME MAKER 강좌

 

 

KAYAN


 

 

 

 

 

◈ 게임 제어 오브젝트(obj_game_system)

 

 

이제 운석을 자동으로 떨어뜨리게 해야 게임이 진행되겠지요.

게임을 제어할 오브젝트를 하나 만듭시다. 이름은 간단하게 obj_game_system 으로 합시다.

 

(▲ 게임 제어 오브젝트)

 

우리는 이 오브젝트에서 게임 점수 체크와 운석 오브젝트를 제어할 것입니다.

알람 이벤트는 특정 시간을 주어, 그 시간이 되면 실행되는 이벤트입니다.

주기적인 타이밍에 이벤트를 발생시킬 때 최적인 이벤트이죠.

그래서 운석은 알람 이벤트를 통해 일정시간마다 운석이 떨어지게 하며, 점수 역시 알람 이벤트를 통해 점수를

득점하도록 할 것입니다.

 

Create 이벤트를 추가하고, 사용할 알람을 Instances[Set Alarm Countdown] 액션으로 설정하도록 합니다.

강좌에서는 Alarm0Alarm1 두가지를 사용합니다.

 

(▲ 알람 이벤트 설정)

 

일반적으로 게임 프레임이 60일 떄, 1초는 60이 됩니다. 게임 시작시 약간의 지연시간을 벌만큼 지정해줍니다.

강좌에서는 간단하게 120으로 설정합니다.

그리고 플레이어의 점수에 관련된 변수를 전역변수(global)선언하도록 합니다.

변수명은 리소스명과 마찬가지로 참조하고 구분이 쉬운 변수명으로 짓는 것이 좋습니다.

강좌에서는 global.player_score 로 선언합니다.

 

(▲ 플레이어 점수에 관련된 변수)

 

먼저 운석을 떨어뜨릴 Alarm 0 이벤트에서 현 알람 이벤트를 재실행하도록 알람을 설정합니다.

 

(▲ 알람 재설정)

 

이와 같이 하게 되면 알람은 지정된 시간마다 반복 실행하게 됩니다.

그리고 한 타이밍에 운석을 하나만 생성할 수도 있지만, 여러개를 동시에 생성할 수도 있습니다.

강좌에서는 반복문을 사용하여 3개를 한번에 생성하도록 해봅시다.

Loop 문 ▶ Repeat 문을 추가합니다.

이제 운석을 화면 맨 위쪽에서 생성해야겠지요.

운석을 랜덤 위치에 떨어뜨리기 위해 랜덤 수치가 필요한 랜덤 액션을 추가합니다.

먼저 랜덤 시드 재설정인 [Randomize] 액션Repeat 반복문 옆에 추가하고, [Get Random Number] 액션

추가하여 x축에서 [0 ~ 룸의 너비] 범위 내의 랜덤 위치를 반환하도록 합니다.

 

(▲ 운석 생성)

 

그리고 Instances[Create Instance] 액션을 추가하여 운석을 생성하도록 합니다.

생성 액션의 레이어는 룸의 인스턴스 레이어를 말합니다. 생성하고자하는 레이어명을 지정해주면 됩니다.

운석 생성이 끝났습니다.

 

다음은 점수를 득점할 수 있는 이벤트를 구성할 것입니다.

Alarm 1 이벤트를 추가합니다.

점수를 득점하기 위한 조건이 필요합니다.

먼저 플레이어가 룸에 존재해야겠지요. 그리고 플레이어가 존재한다면 점수를 득점하고, 운석 생성 이벤트와

마찬가지로 알람이벤트를 재실행해야합니다.

 

룸 내 인스턴스 존재를 체크하는 Instances[If Instance Exists] 조건문 액션을 추가합니다.

대상은 플레이어 오브젝트죠.

그리고 [Set Global Variable] 액션에 Relative 를 체크하여 플레이어 점수를 더합니다.

마지막으로 [Set Alarm Countdown] 액션을 사용하여 이벤트를 재실행합니다.

 

(▲ 플레이어 점수 득점)

 

점수 이벤트가 끝났습니다.

 

이제까지 만든 게임 제어 오브젝트를 룸의 적당한 위치에 마우스로 끌어다 놓아 배치합니다.

이미지가 없는 오브젝트는 룸 배치시 확인하기 좋은 곳에 몰아 배치하는 것이 좋습니다.

보통 이미지가 없는 오브젝트들은 좌측 상단부터 배치하기도 합니다.

 

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

 

(▲ 테스트 화면)

 

테스트하면 점수가 안 보이죠. 아래와 같이 점수가 표시되도록 해봅시다.

 

(▲ 점수화면)

 

 

 

 

 

◈ 점수 표시(obj_game_score_gui)

 

 

점수에 사용할 폰트가 필요합니다.

폰트 폴더에 폰트를 새로 추가하여 폰트를 더블 클릭 후, 폰트의 세부 사항을 설정하도록 합니다.

강좌에서는 그냥 기본 설정에 굵은 이탤릭체로 설정합니다.

 

(▲ 폰트 설정)

 

룸의 점수 글자 위치를 확인할 스프라이트를 추가합니다.

룸에 배치하기 쉬운 이미지로 구성하시면 됩니다.

 

(▲ 점수 글자 배치에 사용할 이미지)

 

그리고 점수를 표시할 오브젝트를 하나 만들고, 룸 배치에 필요한 스프라이트 이미지를 지정해줍니다.

어차피 이 이미지는 룸에 배치할 때만 필요하지 실제 게임에선 보이지 않게 될 것입니다(이후 설명).

오브젝트의 이름은 obj_game_score_gui 로 하겠습니다.

 

(▲ 점수 표시 오브젝트)

 

그리고 Draw 이벤트를 추가합니다.

Draw 이벤트가 추가되면, 오브젝트에 지정된 이미지는 보이지 않게 됩니다. 따라서 Draw 이벤트필요한

이미지를 다시 표시해야하죠.

하지만, 지금은 글자만 표시할 것이기 때문에 생략합니다.

 

먼저 글자를 가운데로 정렬하기 위해 Drawing[Set Text Alignment] 액션을 추가합니다.

그리고 가로(HAlign)fa_center 세로(VAlign)fa_middle을 선택합니다.

 

(▲ Draw 이벤트)

 

다음은 글자 색상으로 [Set Draw Colour] 액션을 추가하고 색상을 지정합니다.

마지막으로 [Set Font] 액션을 추가하고, 사용할 폰트를 지정합니다.

 

(▲ 폰트 설정)

 

이제 [Draw Transformed Value] 액션을 사용해 플레이어 점수를 현재 오브젝트 위치에 표시하도록 합니다.

 

(▲ Draw Transformed Value 액션)

 

이 액션은 글자를 확대/축소 할 수 있는 액션입니다.

작은 글자를 확대하여 표시할 수도 있고, 반대로 작게 표시할 수도 있지요.

만약 확대하여 표시하고 싶다면, 값을 1(원래 폰트 크기)보다 크게 설정하면 됩니다.

 

이제 이 오브젝트를 점수를 표시하고 싶은 룸의 위치에 마우스로 끌어다 놓아 배치하면 됩니다.

강좌에서는 룸 중심부에 배치했습니다.

 

그리고, 다시 테스트 해보면,

 

(▲ 짜잔~ )

 

점수가 표시되는 것을 알 수 있습니다.

 

 

 

 

- 계속 -

 

 

 

 

 

300x250

댓글