본문 바로가기

GMStudio/GMS 강좌

게임메이커 스튜디오 기초강좌 :: 슈팅게임 제작 [2] 비행기 공격


 

<2> 비행기 공격


이전 강좌에서 이동 기능을 넣어봤습니다. 이번에는 비행기에 공격 기능을 넣어보도록 하겠습니다.


이번에도 마찬가지로 미사일 스프라이트를 하나 준비하셔야합니다. 중점(Origin)을 Center로 맞춰주세요.


[▲ 미사일 스프라이트]


제가 준비한 미사일 스프라이트를 사용하셔도 됩니다.


오브젝트를 하나 만들고 미사일 스프라이트를 씌어줍니다. 이름도 지어주세요!


이제 본격적으로 오브젝트를 설계해봅시다. 이벤트 추가(Add Event)를 클릭.


생성될 때(Create) 이벤트를 선택해줍니다.


Create 이벤트에 액션 move탭에 있는 각도이동(Move fixed) 액션을 넣어주세요.

게임메이커 8.0 한글판 에서 'Move fixed' 액션을 각도이동이라고 번역해두었네요. 편의상 각도이동액션으로 합시다.



----------[Move Fixed]------------

Directions : 이동 방향

Speed : 이동 속도

---------------------------------


각도이동 액션은 설정한 각도와 속도로 인스턴스가 이동할 수 있도록 할 수 있습니다.


여기서 알아두면 좋은것은 여기서 변경한 direction, speed 는 기본적으로 모든 인스턴스가 가지고 있는 속성(변수) 입니다.

(x, y 값도 모든 인스턴스가 가지고있는 값이잖아요? direction, speed도 마찬가지입니다.)


인스턴스가 생성되면 speed 값은 초기값 0으로 되어있고 speed값이 변경되면, 설정된 direction(방향) 으로 이동하게됩니다.

비행기를 이동시켰을때처럼 직접적으로 x와 y좌표의 값을 변경해서 이동을 구현할 수 있지만

인스턴스가 일정한 방향과 속도를 가지고 있다면 direction과 speed 값만을 변경해서 쉽게 이동을 구현할 수 있습니다.


미사일 오브젝트의 설계가 끝났습니다.

인스턴스가 생성되면 speed값과 direction 값을 변경해서 이동하게되는 간단한 설정밖에 하지 않았습니다.


이제 이 미사일 오브젝트를 갖고있는(참고하는) 인스턴스가 비행기쪽에서 생성되어야 할겁니다.

 때문에 비행기 오브젝트를 수정해서 스페이스바를 누를 때 미사일 인스턴스가 생성하도록 합시다.


작업했었던 비행기 오브젝트를 다시 열어서 이벤트를 추가해주세요.


미사일이 스페이스바 누를 때 나가도록 하기 위해서.. [Keyboard] -> [Space] 이벤트를 추가해줍니다.


인스턴스를 만들 수 있는 인스턴스 생성(Create Instance)를 넣어줍니다.



---------[Create Instance]----------

object : 생성 될 인스턴스가 갖게 될(참고 할) 오브젝트

x : 인스턴스가 처음 생성되는 x 좌표

y : 인스턴스가 처음 생성되는 y 좌표

---------------------------------


좌표점프와 마찬가지로 Relative를 체크하지 않으면 미사일의 x, y값을 기준으로 두지 않고 룸의 x, y값을 기준으로 두게됩니다.


이제 비행기 오브젝트 설계도 끝났습니다.


게임을 테스트해봅니다. 현재 게임에 문제점이 세가지 정도가 있는데 하나하나 살펴봅시다.


첫번째로 총알이 딜레이가 없이 마구잡이로 나가는 현상입니다.

두번째로 비행기를 이동해서 룸 밖으로 나가버릴 수 있습니다.

세번째는 생성된 총알 인스턴스는.. 룸 밖으로 계속해서 전진하고 있답니다.

(사리지지 않고, 계속해서 쌓이게 되면 메모리를 낭비하고 나중에 렉을 유발합니다.)


이 세가지 문제점을 다음 강좌를 통해서 고쳐보도록 합시다.


마지막으로... '이동 인스턴스 생성(Create Moving)' 이라는 액션이 있습니다.

이 액션을 이용하면 미사일 오브젝트에서 별도로 speed와 direction 값을 변경하지 않고

비행기 오브젝트에서 미사일 인스턴스를 생성과 동시에 speed와 direction를 설정 가능합니다.

한번 오브젝트를 수정해서 이 액션을 사용해봅시다.


일단 총알 오브젝트에서 speed와 direction을 설정해줄 필요가 없으니 [Create] 이벤트를 통째로 제거합니다.

이벤트 오른쪽버튼 클릭 후 Delete Event 를 눌러 제거.


'인스턴스 생성(Create Instance)' 를 '이동 인스턴스 생성(Create Moving)' 액션으로 변경해주어야합니다.

비행기 오브젝트로 와서 [Keyboard]->[Space] 이벤트에 있는 인스턴스 생성 오브젝트도 제거해줍니다.


그리고 이동 인스턴스 생성 액션을 넣어줍니다.


설정을 위와 같이 해주면 됩니다.


---------[Create Moving]----------

object : 생성 될 인스턴스가 갖게 될(참고 할) 오브젝트

x : 인스턴스가 처음 생성되는 x 좌표

y : 인스턴스가 처음 생성되는 y 좌표

speed : 생성된 인스턴스의 speed 초기 값

direction : 생성된 인스턴스의 direction 초기 값

--------------------------------


이러면 수정이 모두 끝났네요. 게임을 실행해보면 이전과 동일한 결과가 나올겁니다.


물론 오브젝트를 설계할 때 정답같은건 없습니다. 즉, 수정 이전에 오브젝트 설계가 절때 더 비효율적이거나 잘못됬다는것이 아니죠.

좀 더 여러방법을 제시하고자 오브젝트 설계를 수정해보았습니다.