본문 바로가기
GameMaker강좌[GM8]/슈팅게임강좌

[게임메이커강좌-슈팅]슈팅게임 만들기-4-적 기체 만들기

by 타락카얀 2013. 2. 13.
728x90





◈캐릭터의 마스크



적기체를 설정하기 이전에 마스크에 대해 알아봅시다.
마스크는 충돌이벤트를 구성할때 매우 중요한 설정 중에 하나입니다.



(오브젝트의 마스크는 피격범위와 같습니다.)


예를 들어 적의 총알이 플레이어에게 맞았을 때, 마스크로 충돌했는지(마스크가 닿았는지) 판단합니다.
그리고 충돌했다면 플레이어는 데미지를 입고, 그렇지 않다면 플레이어는 무사하겠지요.
보통 지나치기 쉽지만, 알맞은 피격 범위를 지정함으로써 올바른 충돌이벤트를 구성할 수가 있습니다.


마스크는 스프라이트 이미지로 설정합니다.
이것은 오브젝트의 Mask에서 설정할 수 있습니다.



Mask로 따로 설정하지 않으면, 오브젝트의 Sprite

지정한 이미지가 마스크를 대신 하게 됩니다.
우선 마스크 설정부터 알아봅시다.



마스크는 Sprite PropertiesModify Mask에서 설정할 수 있습니다.



Bounding Box (마스크 경계 범위)
Automatic : 자동(이미지의 모양대로 설정합니다)
Full image : 전체이미지
Manual : 사용자가 직접 설정합니다

Shape (범위의 모양)
Precise : 투명 부분을 제외한 이미지 모양대로 설정합니다
Rectangle : 사각형 모양대로 설정합니다

Disk : 둥근 원모양으로 설정합니다
Diamond : 다이아몬드 모양으로 설정합니다




◈화면에서 오브젝트들의 깊이(depth)



오브젝트들의 깊이를 설정하는 것은 오브젝트의 depth에서 설정할 수 있습니다.
depth를 설정함으로서 화면에 보이는 순서를 인위적으로 처리할 수 있습니다.



(depth의 설정)


depth는 값이 작을수록 화면 상위에 보이며, 값이 클수록 화면 하위에 보이게 됩니다.





◈적 기체 설정



적의 기체의 설정은 플레이어를 설정할때와 비슷합니다.

일단 적이 여러개 있을 경우를 생각해서, 적을 대표하는 parent오브젝트를 하나 만들어야합니다.


parent는 한 종류의 그룹을 대표하는 오브젝트입니다.
이것을 설정하면 게임상의 한 종류를 일괄적으로 처리할 때 편합니다.



다음은 스프라이트에 적의 기체인 이미지를 추가하고,
오브젝트의 sprite에 이미지를 지정합니다.
그리고 parent에 이 오브젝트를 대표하는 오브젝트를 지정합니다.


슈팅게임을 하다보면 적오브젝트가 데미지를 여러번 받았을 때, 파기되는 경우가 있지요.

그래서 Create이벤트를 만들고, hp변수를 하나 만들어요.



단순한 기체이니 1번정도 데미지 입으면 파기되도록 합시다.


     variable : hp
     value : 1


이제 hp가 0일때, 적 기체를 파기해야겠지요.



Step이벤트를 만들고, Control 액션탭->Variables->Test Variable 조건문 액션을 추가합니다.


      variable : hp
      value : 0
      operation : larger than

      [V]Not


이것은 Not을 체크함으로서, hp가 0보다 크지않을 때입니다.
이렇게 하는 것은 hp가 0과 같거나, 더 작을 수 있기 때문입니다.



그리고 Main1 액션탭->Objects->Destroy instance를 추가합니다.
또한 파기 되었을 때 폭발하는 효과를 보여야 겠지요.



단순히 폭발하는 이미지만 표시하고 파기하면 되기때문에,
Animation End이벤트를 만들고, Main1 액션탭->Objects->Destroy instance을 추가만 하면 됩니다.
Animation End이벤트는 폭발 애니메이션이 끝나면 파기되는 것입니다.



다시 적기체의 오브젝트로 돌아가서, 이 폭발 오브젝트를 추가합니다.
Destroy이벤트를 추가하고, Main1 액션탭->Objects->Create Instance를 삽입합니다.


      object : obj_explosion1 //폭발 오브젝트를 지정

      x : 0

      y : 0


      [V]Relative


그러면 적이 폭발시 x, y지점에 이미지를 표시하게 됩니다.





◈적파기시 점수획득



게임메이커에선 기본적으로 점수변수인 'score'라는 변수를 제공합니다.
이 'score'변수는 룸을 이동해도 리셋되지 않는 전역변수(global)에 해당합니다.



적 오브젝트의 Destroy이벤트
Score 액션탭 -> Score -> Set Score 액션으로 점수를 설정합니다.


      new score : 100
      [V]Relative


Relative를 체크하는 것은 점수를 계속 합산해야하기 때문이죠.

단, 이것은 hp가 0보다 크지 않을 때만, 점수를 올린다고 설정해야합니다.



파기해야하는 상황이 여러가지가 있을 수 있으니, 위와 같이 조건문을 추가해줍시다.
그러면 hp가 0보다 크지 않을 때만 점수를 획득할 수 있습니다.




◈적의 공격



일단 단순한 공격을 넣어봅시다.



먼저 적의 총알오브젝트를 만듭니다.



그리고 적기체의 오브젝트에서 총알을 발사량과 스위치역할을 할 수 있는 변수를 2개 만들어요.


       variable : bullet_switch //스위치 역할을 함
      value : 0
      variable : bullet_n//총알 수량
      value : 1




Step이벤트에 스위치가 0일때 발사하도록 설정합니다.


      variable : bullet_switch //스위치 역할을 함
      value : 0
      operation : equal to//비교값과 같을때



다음은 총알 수량이 0보다 클때의 경우를 추가합니다.


      variable : bullet_n //총알 수량
      value : 0
      operation : larger than //비교값보다 클때


화면 밖에 있을 때 발사하면 이상하지요. 쫄병주제에~ 헤헤

다음은 어느정도 위치에 있을 때 발사하도록 합시다.



      variable : y
      value : 128
      operation : larger than//비교값보다 클때


이렇게 하면 y위치가 128정도 이상이면 발사하게 됩니다.




      object : obj_enemybullet
      x : 0
      y : 0
      speed : 2
      direction : 270

      [V]Relative


이렇게 하면 적기체가 총알을 발사하면, 그 총알은 화면 아래를 향해 2속도로 이동하게 됩니다.


그리고 스위치를 1로 만들고, 총알 수량을 -1차감합니다.


      variable : bullet_switch//스위치
      value : 1


      variable : bullet_n//총알 수량
      value : -1


      [V]Relative


그리고 수량이 남아있다면 다시 발사해야겠지요. 이럴때는 딜레이이벤트를 만들어 사용합시다.



Main2 액션탭 -> Timing -> Set Alarm을 추가하고,


      number of steps : 60 //Alarm0 이벤트 실행시간(스텝은 초당 1/룸속도)
      in alarm no : Alarm0 //이벤트


이제 Alarm0이벤트를 만들고, 여기에서 스위치를 다시 0으로 만듭니다.

그러면 총알 수량이 남아있을 때 다시 발사하게 됩니다.


      variable : bullet_switch //스위치
      value : 0


하지만, 여기에선 수량이 1개이기 때문에 의미가 없지만, 여러번 발사하는 경우에 유용합니다.



총알이 화면 밖을 벗어났을 때는 더 이상 필요없기 때문에 파기해야합니다.
이럴땐 유용한 이벤트가 있는데, 그것은 Outside Room 이벤트Intersect Boundary이벤트입니다.


Outside Room :룸 밖으로 나갔을 때 일어나는 이벤트
Intersect Boundary :룸의 경계에 맞닿았을 때 일어나는 이벤트



다음 강좌에서는 기체간의 충돌이벤트에 대해 설정해봅시다.



----------응용예제---------


shooter-1945-4.gmk



300x250

댓글