2019년 10월 13일 일요일

GMS2 GameMaker Studio 2 로 슈팅 게임 만들기 (6) (Let's Make shooting game)


0. 목차


슈팅 게임의 기초 - 배경 스크롤
다중 배경 스크롤
주인공 object
ON Screen Jog
적 object
적 탄환
boss object
boss 탄환
Timelines 사용
Paths 사용
Player 입장 구현
Player 퇴장 구현
충돌
우주 배경 배경 스크롤


1. Timelines 사용, Paths 사용

Boss object에서 timelines, paths를 사용하였습니다. 그렇기 때문에 따로 추가 설명은 필요없을것으로 보이나 여러 paths가 존재할때 세부적으로 조정이 필요한 경우 path layer를 추가하여 확인 수정이 가능한 부분이 있습니다.
단순하게 paths에서 편집을 할때는 정확한 위치 판단이 어려움이 있습니다. 그렇지만 room에 path layer를 아래와 같이 추가합니다.
참고로 게임중에는 path layer가 보이지 않습니다.

2. Player 입장 퇴장

Boss object 구현에 힌트가 있습니다. tilmeline 0 에 control을 off하고 player를 입장 시킵니다. 아래와 같이 구현합니다.
with(oPlayerSky){
 x = -20;
 speed = 3;
 direction = 0;
 controlOff = true;
}

controlOff 이 변수는 oPlayerSky의 control을 off시킵니다.

oPlayerSky step이벤트에 if( controlOff ) return; 조건을 추가 합니다.

그리고 timeline 60 에 player contorl을 on시킵니다. 코드는 아래와 같은 합니다.
with(oPlayerSky){
 speed = 0;
 direction = 0;
 controlOff = false;
}

마지막으로 퇴장은 player 가 boss를 만나서 시간이 흘러 도저히 깨지 못하는 경우가 필요한 경우 사용합니다.

timeline 6000정도 시간은 적절히 조절 하면 됩니다. 아래 정도 코드를 넣으면 화면 밖으로 퇴장합니다.
with(oParPlayer){
 speed = 6;
 direction = 0;
 controlOff = true;
}
global.disable_check_collision = true;

퇴장 이후 처리를 어떻게 할까 궁금해 하시는 분들을 위해 추가 설명을 드리자면, 화면밖에 어떤 event object를 두어서 해당 object와 충돌이 이루어지면 메인 화면으로 간다든지 처리를 하면 됩니다.
이번에는 내용은 간단하나 시작 부분이라 화면 캡쳐가 어려워서 따로 이미지를 올리지 않도록 하겠습니다.

3. 충돌

충돌 처리에 대한 부분이 빠졌습니다. 방식은 어려가지가 있지만, 여기에서는 규칙을 세웠습니다. 총알쪽에서 destroy를 호출 한다. 폭파 이미지는 해당 object에서 구현한다, 개인적인 규칙입니다.
날파리가 와 총알이 만났으니, 우리가 가지고 있는 총알인 oAmmo 코드에 충돌 이벤트를 넣어줍니다.


코드는 global.gun_power는 우리가 발사한 총알의 세기입니다. 체력이 0이 되었을때 destory를 하게 구현을 하였고,

var gun_power = global.gun_power;
with(other){
 hp = hp - gun_power;
 hurt = 1;
 if (hp <= 0) {
                hp = 0;
  instance_destroy()
 }
}

instance_destroy()

fly object에서는 destroy할때 폭파이미지를 그려줍니다.

if( hp==0 ) instance_create_layer(x,y,"Instances_Exp",oExplotion)

instance_destroy()

전체적으로 어느정도 완성된것 같습니다. score라던가 주인공이 맞았을대 그런 부분들이 남아 있지만 그런 부분들은 숙제로 남깁니다.

4. 동작 화면




5. 소스


https://drive.google.com/open?id=1LohlwJIQoHVJw2t7zylnB9QTZOdp-p0A









댓글 없음:

댓글 쓰기