adsense



[JAVA/slick2d] 2D 슈팅게임 위치즈 스크램블 제작강좌 -step 13-

step 13. 아이템 차례입니다.

Enemy처럼 아이템 종류를 포괄할 Item 클래스를 만들고, 아이템 클래스는 이것을 상속하는 방식으로 할 것입니다.
prefab에 GameObject를 상속한 GameItem 클래스(추상)를 만듭니다. 일단 내용은 아직 확정되지 않았으니 아이템을 만들어가면서 채워보겠습니다.

그리고 GameItem을 상속해 CoinItem 클래스를 만듭니다.



코인아이템은 적이 파괴되면 해당 위치에 생성되어야 하므로 생성자로 받은 좌표에서 생성되고,


위로 튕겨올랐다가 포물선을 그리며 아래로 떨어집니다.


그러다 플레이어와 겹치면 취득됩니다.

이미지 한 장에 7장의 프레임이 들어있으니 이 프레임을 순차적으로 반복해서 보여주면 됩니다.
프레임 값으로 주어지는 (cnt/3)%7 값은, 3프레임에 1장씩 넘기며 모두 7장 있다는 의미가 됩니다.


이전에는 이렇게 한 장의 일부를 떼어 보여줄 때 클리핑을 사용했습니다만,
Slick2D에 getSubImage가 준비되어 있으니, 이걸 쓰는게 좋겠습니다. (예, 이 단계에 올 때까지 있는 걸 몰랐습ㄴ...)


checkEat은 플레이어와 충돌했는가 여부를 검사하는 함수입니다.


아무 플레이어와도 충돌하지 않았으면 null을 리턴하고, 충돌했으면 충돌한 플레이어 객체를 리턴합니다.

이 정보를 기준으로 충돌한 플레이어에게 점수를 줄 수 있습니다.


※이것으로 GameItem 클래스에 필수 추상함수로 등록할 것은 protected Player checkEat() 가 됩니다.
※모든 종류의 아이템이 동일하게 플레이어와의 충돌루틴을 갖게 된다면, checkEat을 추상이 아닌, 위의 내용을 구현해서 GameItem 클래스에 둬도 됩니다. 그리고 다른 충돌루틴이 필요하다면 오버라이드 해서 구현해주고요.


아이템이 등장할 수 있도록, Neuroi1, Neuroi2 클래스에서 플레이어 공격으로 소멸하는 위치에서 생성, addChild 하는 코드를 추가합니다.


이제 테스트해 보겠습니다.




기왕 아이템을 만든 김에 실드아이템까지 구현해 봅니다.
실드 자체는 클래스로 만들어서 플레이어 캐릭터에 연동하는 방법도 있겠지만, 여기서는 Player 클래스에 구현했습니다.

현재 실드 상태인가를 판단하기 위한 변수 shieldCnt를 만들고,


실드 그림이 될 이미지를 하나 읽어주고,


shieldCnt가 0 초과이면, 실드 그림을 출력해주고 (실드일 때 충돌 범위를 더 크게 잡아주는 것은 안전할때는 핸디를 주는 느낌이랄까요)


적에게 데미지를 받았을 때 데미지 처리를 하지 않고 shieldCnt만 깎아줍니다.

적 총알이나 적 캐릭터와 충돌하면 불리는 setHit에 이 부분을 넣어 줍니다.
실드가 한꺼번에 확 깎이지 않도록 아주 짧은 immortal 시간을 설정해줍니다.


외부 클래스에서는 Player 객체의 setShield 함수를 통해 shieldCnt에 값을 세팅할 수 있습니다.
즉, 실드 아이템이 플레이어와 충돌하면 플레이어의 setShield 함수를 호출해 실드 장착 상태로 만들어줄 수 있는 것입니다.

(※이쯤 되면, GameObject에 기본적으로 다른 오브젝트의 rect와 intersect를 체크해서, 어떤 GameObject와 충돌했는지 인수로 넣어서 불러내는, 그런게 기본적으로 있어도 될 것 같다는 느낌이 들죠)


실드아이템 ShieldItem 클래스는 CoinItem 클래스의 복붙입니다.
checkEat을 부른 다음에 setMyScore가 아니라 앞에서 추가한 setShield를 호출한다는 정도의 차이.


실드는 코인과 달리 흔하게 나오면 안되니까 파괴하기 어려운 Neuroi2에게서 확률적으로 드롭되게 합니다.



※잠깐, 응용 메모.

파괴되는 시점에서 아이템을 나오게 하는 것을 보면, 다른 점에도 착안할 수 있습니다.

'죽으면서 총알을 뿌리는 적을 만들려면 어떻게 하나요'
죽을 때 아이템을 생성하듯 총알을 생성하게 하면 됩니다.

만일 ASTEROID BELT처럼 커다란 운석을 파괴하면 작은 운석 두 개로 나뉘는 게임이라면, 운석이 파괴되었을 때 작은 운석 두 개를 생성하면 되는거죠.

반드시 파괴되는 시점이어야 할 필요도 없습니다.
적이 유도미사일을 발사하고 이 유도미사일을 공격해 파괴할 수 있는 슈팅게임도 많은데, 이때 나오는 미사일은 또 다른 적 캐릭터입니다.
즉, 적 캐릭터가 적 캐릭터를 발사하는 것도 가능합니다.

혹은 '자기 자신은 존재하지 않으면서' 다른 적을 생성해내는, 마치 화이트홀 같은 적 오브젝트도 만들 수 있습니다.
이런 건 주로 편대를 이루는 적을 생성할 때 사용합니다.


이것으로 코인 아이템과 실드 아이템, 실드 구현을 마쳤습니다.


핑백

덧글

댓글 입력 영역


Books

Geek라이프

메가 드라이브 퍼펙트 카탈로그
마에다 히로유키 저/조기현 역

미소녀 일러스트 테크닉
B-은하, pen스케, 카와이 저/정유진 역

핵심강좌! Cocos2d-x
이재환 저

피규어의 교과서 레진 키트 & 도색 입문 편
후지타 시게토시 저/김정규 역
예스24 | 애드온2
일본서적 전문사이트 NEPIC