4. 총알을 만듭니다.

튜토리얼 리소스 폴더에서 총알을 선택합니다.
스프라이트의 원점을 중앙으로 하는 걸 잊지 맙시다.

총알 오브젝트를 생성하고, 방금 만든 스프라이트를 선택합니다.
주인공 오브젝트창에서 이벤트를 추가합니다.

주인공 비행기 오브젝트 창을 열고, 이벤트를 추가합시다.
키입력에서 총알 발사 버튼으로 쓸 버튼을 선택합니다.

액션에 메인1 탭에 있는 이동 오브젝트 생성을 끌어다 놓습니다.

오브젝트 칸에 총알 오브젝트를 선택하고,
속도는 10, 방향은 90으로 맞추어 줍니다.
튜토리얼 리소스 폴더에서 총알을 선택합니다.
스프라이트의 원점을 중앙으로 하는 걸 잊지 맙시다.
총알 오브젝트를 생성하고, 방금 만든 스프라이트를 선택합니다.
주인공 오브젝트창에서 이벤트를 추가합니다.
주인공 비행기 오브젝트 창을 열고, 이벤트를 추가합시다.
키입력에서 총알 발사 버튼으로 쓸 버튼을 선택합니다.
액션에 메인1 탭에 있는 이동 오브젝트 생성을 끌어다 놓습니다.
오브젝트 칸에 총알 오브젝트를 선택하고,
속도는 10, 방향은 90으로 맞추어 줍니다.
디버그 모드로 실행시키고, 스페이스바를 누르면 총알이 나가는 것을 볼 수 있습니다.
이제 총알을 맞을 적을 만들어 봅시다.
5. 적 비행기를 만듭니다.

적 비행기 스프라이트를 등록하고,

적 오브젝트를 생성합니다.
적 오브젝트창에 충돌 이벤트를 추가합니다.

이벤트 추가에서 충돌을 선택하고, 충돌할 오브젝트로 총알 오브젝트를 선택합니다.

메인1 탭에있는 인스턴트 제거(쓰레기통 아이콘)액션을 끌어놓습니다.

자신을 선택하고 확인을 누릅니다.

룸 창을 열고, 적 오브젝트를 배치해봅시다.
적 비행기 스프라이트를 등록하고,
적 오브젝트를 생성합니다.
적 오브젝트창에 충돌 이벤트를 추가합니다.
이벤트 추가에서 충돌을 선택하고, 충돌할 오브젝트로 총알 오브젝트를 선택합니다.
메인1 탭에있는 인스턴트 제거(쓰레기통 아이콘)액션을 끌어놓습니다.
자신을 선택하고 확인을 누릅니다.
룸 창을 열고, 적 오브젝트를 배치해봅시다.
이제 디버그 모드로 실행시켜 봅시다. 적이 총알을 맞으면 사라지는 것을 볼 수 있습니다.
하지만 게임에서 이대로 두면 너무나도 밋밋해 보입니다.
죽었을 때 폭발 이펙트를 추가해보도록 합시다.
6. 폭발 이펙트를 만듭니다.


폭발 오브젝트창에 애니메이션이 끝날시 이벤트 추가합니다.

기타 이벤트에 있는 애니메이션 끝날시를 선택합니다.

애니메이션 끝날시 이벤트에
<인스턴트 제거 액션>을 추가합니다.
적 오브젝트, 총알과의 충돌 이벤트에서 <오브젝트 생성 액션> 추가해봅시다.

오브젝트 생성 액션을 추가합니다.

생성할 오브젝트로 방금 만들었던 폭발 오브젝트를 선택하고,
현재기준에 체크합니다.
폭발 오브젝트창에 애니메이션이 끝날시 이벤트 추가합니다.
기타 이벤트에 있는 애니메이션 끝날시를 선택합니다.
애니메이션 끝날시 이벤트에
<인스턴트 제거 액션>을 추가합니다.
적 오브젝트, 총알과의 충돌 이벤트에서 <오브젝트 생성 액션> 추가해봅시다.
오브젝트 생성 액션을 추가합니다.
생성할 오브젝트로 방금 만들었던 폭발 오브젝트를 선택하고,
현재기준에 체크합니다.
이제 디버그 모드로 실행시켜보면, 적이 죽을 때마다 폭발 이펙트가 나타나는 것을 볼 수 있습니다.
기본적인 슈팅게임의 구성을 갖추었습니다. 하지만 여전히 게임은 이상합니다.
주인공을 화면 바깥으로 몰고가면 화면 바깥으로 나가버립니다. 이를 막아보도록 합시다.
7. 주인공 비행기 화면 바운드 처리
주인공 오브젝트, 방향키 입력 이벤트에서 <변수체크> 액션을 추가를 합니다.

방향키 이벤트에 컨트롤 탭에 있는 변수체크 액션을 추가합니다.
좌표 점프 액션보다 위에 놓도록 합니다.
우선, Left 이벤트부터 추가해 보겠습니다.
변수: x, 값: 0, 설정: 초과 를 입력합니다.
이 말이 무슨 뜻이냐 하면, 주인공 비행기 오브젝트의 좌표 변수값인 x가 0보다 크면 아래의 액션을 작동시킨다는 말입니다.
즉, x좌표가 0보다 작아지면 아래 점프좌표 액션이 작동하지 않는다는 말입니다.
Up, Right, Down 이벤트에도 다음과 같이 추가해봅시다.

Up 변수체크 액션에는 위와 같이 설정합니다.

Right 변수체크 액션에는 위와 같이 설정합니다.
room_width는 이 오브젝트가 위치한 룸의 가로길이를 뜻하는 변수입니다.

Down 변수체크 액션에는 위와 같이 설정합니다.
room_height는 이 오브젝트가 위치한 룸의 세로길이를 뜻하는 변수입니다.
주인공 오브젝트, 방향키 입력 이벤트에서 <변수체크> 액션을 추가를 합니다.
방향키 이벤트에 컨트롤 탭에 있는 변수체크 액션을 추가합니다.
좌표 점프 액션보다 위에 놓도록 합니다.
변수: x, 값: 0, 설정: 초과 를 입력합니다.
이 말이 무슨 뜻이냐 하면, 주인공 비행기 오브젝트의 좌표 변수값인 x가 0보다 크면 아래의 액션을 작동시킨다는 말입니다.
즉, x좌표가 0보다 작아지면 아래 점프좌표 액션이 작동하지 않는다는 말입니다.
Up, Right, Down 이벤트에도 다음과 같이 추가해봅시다.
Up 변수체크 액션에는 위와 같이 설정합니다.
Right 변수체크 액션에는 위와 같이 설정합니다.
room_width는 이 오브젝트가 위치한 룸의 가로길이를 뜻하는 변수입니다.
Down 변수체크 액션에는 위와 같이 설정합니다.
room_height는 이 오브젝트가 위치한 룸의 세로길이를 뜻하는 변수입니다.
이제 주인공이 화면 바깥으로 나가지 않게 되었습니다.
하지만, 아까부터 주인공 총알이 쉬지 않고 나와, 레이저 빔 급의 파워를 가지고 있습니다. 이래서는 제대로 된 슈팅게임을 만들기 어렵겠죠?
이제 주인공의 총알 발사 속도를 조절해 봅시다.
8. 총알 발사 속도를 조절
주인공 오브젝트창에서 <생성될때>, <알람0> 이벤트추가해 봅시다.

주인공 오브젝트에 생성될때 이벤트와 알람0 이벤트를 추가하도록 합니다.
생성될때 이벤트는 오브젝트가 생성되면서 발생하는 이벤트이고,
알람0 이벤트는 우리가 임의대로 정한 타임에 맞추어 발생시키는 이벤트입니다.

생성될때 이벤트에 변수설정 액션을 추가합니다.
변수설정 액션은 컨트롤 탭에 있습니다.
위와 같이 설정하도록 합니다.
fire라는 변수에 true라는 값을 넣는다는 의미입니다.
fire는 우리가 임의로 만든 변수입니다. 앞으로 이 변수가 true값일 때만 총알이 발사하도록 만들 것입니다.
반대로 총알을 쏘지 못하는 경우, fire는 false값을 가지게 될 것 입니다.

총알을 발사하는 입력 이벤트 부분에 변수체크 액션을 맨 위에 추가합니다.
fire 변수가 true일 때만 총알을 발사해주기 위해 위와 같은 액션을 추가했습니다.

그 아래 변수설정 액션을 추가하고, 위와 같이 설정을 해줍니다.
alarm[0]은 알람0 이벤트 변수를 뜻합니다.
alarm[0]에 10를 설정한 것은
10프레임 후에 alarm[0] 이벤트를 실행시키겠다는 의미입니다.
alarm[0]변수는 1프레임마다 1씩 줄어듭니다. 그리고 alarm[0]변수가 0이되는 순간, 알람0 이벤트를 발생시킵니다.
게임메이커 기본설정 FPS(Frame Per Second)가 30으로 되어있으므로, 1초에 30프레임이니까.
1/3초 후에 alarm[0]을 실행시킨다는 말이 됩니다.

변수설정 액션을 추가하여 위와 같이 설정해줍니다.
fire변수에 false값을 넣어 계속해서 총알이 나가는 것을 방지해 줍니다.

시작 블럭과 앤드 블럭을 위와 같이 추가 해줍니다. 이 액션들은 컨트롤 탭에 있습니다.
시작 블럭과 앤드 블럭은 변수체크와 같이 쓰입니다.
변수 체크 액션에 작동하는 액션들을 묶을 때 위와 같이 씁니다.
즉, fire 변수 값이 true 일 경우, 블럭에 묶인 액션들을 실행시킨다는 의미입니다.

알람0 이벤트로 가서 변수설정 액션을 추가하고 위와 같이 설정 합니다.
알람0 이벤트가 발생하면 false 값이었던 fire변수를 true로 바꾸어 주겠다는 의미입니다.
주인공 오브젝트창에서 <생성될때>, <알람0> 이벤트추가해 봅시다.
주인공 오브젝트에 생성될때 이벤트와 알람0 이벤트를 추가하도록 합니다.
생성될때 이벤트는 오브젝트가 생성되면서 발생하는 이벤트이고,
알람0 이벤트는 우리가 임의대로 정한 타임에 맞추어 발생시키는 이벤트입니다.
생성될때 이벤트에 변수설정 액션을 추가합니다.
변수설정 액션은 컨트롤 탭에 있습니다.
위와 같이 설정하도록 합니다.
fire라는 변수에 true라는 값을 넣는다는 의미입니다.
fire는 우리가 임의로 만든 변수입니다. 앞으로 이 변수가 true값일 때만 총알이 발사하도록 만들 것입니다.
반대로 총알을 쏘지 못하는 경우, fire는 false값을 가지게 될 것 입니다.
총알을 발사하는 입력 이벤트 부분에 변수체크 액션을 맨 위에 추가합니다.
fire 변수가 true일 때만 총알을 발사해주기 위해 위와 같은 액션을 추가했습니다.
그 아래 변수설정 액션을 추가하고, 위와 같이 설정을 해줍니다.
alarm[0]은 알람0 이벤트 변수를 뜻합니다.
alarm[0]에 10를 설정한 것은
10프레임 후에 alarm[0] 이벤트를 실행시키겠다는 의미입니다.
alarm[0]변수는 1프레임마다 1씩 줄어듭니다. 그리고 alarm[0]변수가 0이되는 순간, 알람0 이벤트를 발생시킵니다.
게임메이커 기본설정 FPS(Frame Per Second)가 30으로 되어있으므로, 1초에 30프레임이니까.
1/3초 후에 alarm[0]을 실행시킨다는 말이 됩니다.
변수설정 액션을 추가하여 위와 같이 설정해줍니다.
fire변수에 false값을 넣어 계속해서 총알이 나가는 것을 방지해 줍니다.
시작 블럭과 앤드 블럭을 위와 같이 추가 해줍니다. 이 액션들은 컨트롤 탭에 있습니다.
시작 블럭과 앤드 블럭은 변수체크와 같이 쓰입니다.
변수 체크 액션에 작동하는 액션들을 묶을 때 위와 같이 씁니다.
즉, fire 변수 값이 true 일 경우, 블럭에 묶인 액션들을 실행시킨다는 의미입니다.
알람0 이벤트로 가서 변수설정 액션을 추가하고 위와 같이 설정 합니다.
알람0 이벤트가 발생하면 false 값이었던 fire변수를 true로 바꾸어 주겠다는 의미입니다.
이제 모두 완성되었습니다. 디버그 실행버튼을 눌러, 게임을 해봅시다!
이제야 제대로 된 슈팅게임 처럼 보입니다.하지만 적군들은 아직 움직이질 않습니다.
다음 시간에는 적군을 움직이고, 총알도 쏘는 간단한 AI를 넣어보도록 하겠습니다.
지금 까지의 예제 파일
shooting_ex.gmk
