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

[게임메이커강좌-슈팅]슈팅게임 만들기-3-플레이어 공격

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





◈플레이어 캐릭터의 공격1



플레이어가 공격하는 것에 대해 생각해봅시다.


일단 비행기에서 발사될 총알스프라이트를 추가합니다.



그리고 총알 오브젝트를 만들어 Sprite에 추가된 스프라이트를 지정합니다.



총알을 만들었으니 생성되었을 때, 앞으로 나아가게 해야겠지요.


이벤트에 마우스 오른쪽 버튼을 눌러 Add Event를 클릭하여 Create이벤트를 만들고
액션 이동탭-Speed Vertical을 삽입합니다.
위쪽으로 나아가게 해야하니 값은


      vert. speed : -8


이렇게 합니다.
그러면 위쪽으로 쭉 나아가게 되겠지요.


이제 이 오브젝트가 화면에서 벗어났을 때를 생각해야합니다.



(룸상의 값. 룸의 좌측 상단이 0,0으로 시작합니다. )


오브젝트를 파기하지 않으면 이 오브젝트는 계속 룸상에 남아있게 됩니다.
한 두개 정도 남아있으면 문제는 되지 않지만, 여러개가 남아있다면,
메모리에 영향을 주어 렉이 발생하기도 합니다.
그래서 룸을 벗어났을 때 더이상 필요없다면 파기해야합니다.



총알이 화면에서 완전히 벗어나 보이지 않는 지점을 생각해 파기 이벤트를 작성합니다.
총알이미지를 생각해서 y축으로 -16정도 벗어나면 총알을 파기하도록 합시다.
액션 컨트롤 탭 -> Variable -> Test Variable로 조건문을 작성합니다.


      variable : y
      value : -16
      operation : smaller than


그리고 액션 메인1 탭 -> Object -> Destroy instance액션을 삽입합니다.

이것은 룸에 있는 현재 오브젝트(또는 다른 오브젝트를 지정할 수도 있음)를 파기하는 것입니다.




◈플레이어 캐릭터의 공격



이제 플레이어가 키를 누르면 총알을 계속 발사하게 할지,
아니면 키를 한번 눌렀을 때, 한번만 총알을 발사하게 할지를 생각해야합니다

첫번째는 키를 누르고 있을때 이벤트가 발생하는 키보드의 keyboard이벤트를 사용해야하고,
두번째는 키를 눌렀을때만 이벤트가 발생하는 키보드의 Key press이벤트를 사용해야합니다.

강좌에선 첫번째 방법을 사용해보도록 하지요.
keyboard이벤트는 키를 누르고 있으면, 스텝(초당 1/룸 속도)당 한번씩 일어나기 때문에,
딜레이를 처리하는 스위치용 변수가 필요합니다.



플레이어 기체에 Create이벤트를 하나 만들고,
변수하나를 만듭니다.
변수를 만들때는 리소스들(스프라이트, 오브젝트, 사운드등)의 이름과 중복되지 않고,
알아보기 쉬운 변수로 만드는 것이 좋습니다.
여기선 can_shoot이라 짓겠습니다.
액션 컨트롤탭 -> Variable -> Set Variable


      variable :can_shoot
      value : 1


이런식으로해서 변수 액션을 삽입합니다.



발사키를 Space키로 해보죠.
keyboard이벤트Space키를 추가합니다.
그리고 조건문으로 can_shoot이 1과 같을 때로 설정합니다.


      variable : can_shoot //스위치 변수
      value : 1
      operation : equal to



이벤트에 액션 컨트롤 탭 -> other -> Start blockEnd block을 각각 넣어줍니다.



그리고 Start blockEnd block 사이에 총알을 발사하게 할 설정을 넣습니다.
플레이어 기체 중심으로 좌우 발사하게 하도록 합시다.
액션 메인1 탭 -> Obeject -> Create instance를 선택해 삽입합니다.


Relative는 현 오브젝트 (x,y)좌표를 중심으로 합니다.
따라서 체크 후의 (0,0)좌표는 현 오브젝트의 (x,y)와 같습니다.
체크 해제 후의 (0,0)좌표는 룸의 (0,0)이 되는 것입니다.
먼저 Relative를 체크합니다. 그리고


      object : obj_bullet //발사시킬 총알 오브젝트 선택
      x : -24
      y : 0

      [V]Relative


이렇게 설정합니다.



그리고 오른쪽도 발사시켜야겠죠.


      object :obj_bullet //발사시킬 총알 오브젝트 선택
      x : 24
      y : 0

      [V]Relative



총알이 발사된후 이젠 딜레이를 주어야합니다.
액션 컨트롤탭 -> Variable -> Set Variable


      variable : can_shoot
      value : 0


이런식으로해서 변수 액션을 삽입합니다.


그리고 액션 메인2탭 -> Timing -> Set Alarm액션을 사용하여


      number of steps : 15 //시간 (초당 1/룸속도)
      in alarm no : Alarm 0 //사용할 알람 이벤트(0-11)


이렇게 설정합니다. 약 15스텝 후에 이벤트가 일어나게하는 것입니다.


다음은 알람이벤트(위의 Alarm0에 대한 이벤트)를 하나 추가합니다.



그리고 Set Variable액션을 사용하여


      variable : can_shoot
      value : 1


로 설정합니다.



지금까지의 강좌를 설명하자면
can_shoot변수가 1일때 Space키를 누르게 되면
총알을 발사하고, can_shoot변수를 0으로 만듭니다.
그러면 이후에 Space를 누르게 되면 변수가 0이기 때문에
조건을 만족시키지 못해서 총알을 발사하지 못하지요.
그래서 Alarm0으로 15정도의 딜레이를 주고
Alarm0이벤트에서 can_shoot이라는 변수값을 1로 다시 만들게하는 것입니다.
그렇게 되면 다시 Space키를 누르면 can_shoot=1이라는 조건을 만족하게 되고, 다시 총알을 발사하게 되는 것입니다.

다음 강좌에선 적기체를 만들어 보도로록 해요.^^



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


shooter-1945-3.gmk




300x250

댓글