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

[게임메이커강좌-슈팅]슈팅게임 만들기-5-충돌이벤트 구성

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





◈충돌 이벤트-플레이어 기체의 총알




우선 플레이어 총알부터 설정해봅시다.
플레이어 총알 이벤트에 적기체의 상위 parent를 지정하여 충돌이벤트를 추가합니다.
충돌했을 때의 이벤트내에서 상대편 인스턴스를 other로 읽을 수 있습니다.
그래서 other.hp라하면 상대의 hp를 설정할 수 있다는 것입니다.
하지만 이것을 설정할때 반드시 상대편 인스턴스에 해당 변수가 있어야 한다는 것입니다.
이를 고려해 변수를 설정하는 것이 중요합니다.



hp가 음수 떨어지자 않게 조건문으로 설정할 수 있습니다.

다음은 상대편(적 인스턴스)hp를 감소 시켜야겠지요.



      variable : other.hp
     value : -1

      [V] Relative



그리고 총알이 폭발효과를 주면 더 좋겠지요.
폭발효과를 생성하도록 합시다.

다음은 총알을 파기하도록 합니다.



총알을 파기하기전에 점수를 올리는 방법도 좋습니다.






◈충돌 이벤트-적 기체의 총알



이번엔 적기체의 총알에 대한 충돌이벤트를 설정해봅시다.
우선 플레이어에 대한 hp를 설정해야합니다.
hp는 다음 룸(스테이지)으로 넘어가도 그대로 유지되어야 겠지요.
그래서 전역변수(global)를 써야합니다.
기본적으로 지원되는 lives, health변수를 쓸 수 있지만, 여기서는 global변수를 이용해
새로 만들어 봅시다.


일단 오브젝트를 하나 만들고, Game Start이벤트를 추가해 global.hp를 5정도로 만들어요.



이 오브젝트는 게임이 시작되는 룸에 한번만 배치하면 됩니다.


그리고 적 기체 총알의 충돌이벤트를 설정해봅시다.



충돌이벤트에 플레이어 기체를 지정하고, global.hp가 음수가 되지 않게 조건문을 걸어줍시다.



그리고 global.hp를 -1을 감소하도록 합니다.



역시 플레이어의 총알처럼 폭발효과가 있으면 좋겠지요.



마지막으로 총알을 소거하도록 합니다.





◈충돌 이벤트-적 기체와의 충돌



다음은 플레이어의 기체와 적 기체간의 충돌시 이벤트를 설정해봅시다.
이 설정 역시 총알들의 이벤트를 설정할 때와 비슷합니다.



hp가 음수가 되지 않게 조건문을 설정해주고, global.hp를 감소시키도록합니다.
문제는 이대로 플레이어를 완전히 격추할 것인지, 아니면 hp만 감소시킬 건지를 선택해야합니다.
어떻게 할까요?
우선 여기에선 hp만 감소시키도록 합시다.
hp를 감소시킬때 플레이어는 안전한 위치를 찾거나 해야겠지요.
이것을 하기위해 일단 딜레이시킬 때의 스위치 변수와 알람이 필요합니다.



플레이어 기체에 딜레이할 스위치용 변수를 하나 선언합시다.


      variable : hp_delay
     value : 0



충돌 이벤트로 가서 딜레이 스위치가 0일때만 작동하도록 조건문을 삽입합니다.


      variable : hp_delay
      value : 0
      operation : equal to



폭발 효과도 있으면 좋겠지요.
그리고 딜레이 스위치를 1로 만듭니다.


      variable : hp_delay
      value : 1



딜레이 기간동안 플레이어의 기체에도 변화를 주어야 확인이 가능하겠지요.
이럴 땐 Main1 액션 탭 -> Sprite -> Color Sprite 액션을 사용하여 효과를 줄 수 있습니다.

이 액션은 이미지에 색을 혼합시키거나 투명도인 알파값을 줄 수 있습니다.
알파값은 1이 불투명이고, 1에서 0으로 갈수록 투명해집니다.
다음은 알람을 지정해줍니다.



Alarm 11을 사용하여 2초간 딜레이를 설정해 봅시다.


      number of steps : 120 //1초는 룸속도. 1 step은 1/룸속도.
      in alarm no : Alarm 11



다음 Alarm 11이벤트를 만들고, 딜레이 스위치를 다시 0으로 만듭니다.

그리고 Main1 액션 탭 -> Sprite -> Color Sprite 액션을 사용하여 알파값을 1로 합니다.




◈플레이어의 hp가 0일때



플레이어의 hp가 0일때도 설정해주어야 겠지요.



global.hp가 0보다 크지 않을 때의 조건문을 삽입합니다.


      variable : global.hp
      value : 0
      operation : larger than

      [V]Not



그리고 폭발 효과와 파기액션을 삽입합니다.



◈적 기체의 총알과 충돌시 데미지 조건 추가



플레이어가 적 기체의 총알과 충돌시 데미지 조건을 추가해주어야 겠지요.

적 기체 총알에서 플레이어와 충돌 이벤트로 이동합니다.



여기서 플레이어의 hp감소 딜레이변수가 0일때의 조건문을 추가해줍니다.


      variable : other.hp_delay
      value : 0
      operation : equal to


다음 강좌에선 시나리오대로 진행가능하도록 할 수 있는 타임라인에 대해 알아봅시다.




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


shooter-1945-5.gmk



300x250

댓글