adsense



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

step 10. 잠시 쉬어가는 기분으로 자잘한 부분들을 손봅니다.


충돌사각형을 주석을 풀고 묶고 해서 보이거나 안보이거나 하자니 귀찮습니다.
BasicScene에서 디버그 모드 플래그 isDebug 를 만들고, GameScene에서는 2번 키를 눌러 플래그를 on, off.
그리고 다른 클래스에서 이걸 참조할 수 있게 getDebug, setDebug 함수를 만듭니다.

각 클래스들의 사각형을 그려주는 부분에서 isDebug로 그려주고 그려주지 않고를 판단하게 하면 됩니다.


앞에서 작업했던 pause, 디버그 모드 온/오프를 BasicScene으로 옮겨 각 화면에서 공통적으로 작동하게 하고,
거기에 더해 전체화면 모드를 추가했습니다.


fullScreen이란 변수를 추가하고, F12 키가 들어오면 이것을 true/false로 전환합니다.
update에서는 이 값과, 현재 풀화면 여부인가를 비교해 다르면 fullScreen 값을 세팅합니다.

키보드 이벤트에서 각 값의 변환에 대응해 줍니다.


※전체화면/창모드 전환 명령은, update 이외의 위치에서 사용하면 SlickException을 일으킵니다.


디버그 모드를 켜지 않았을 때 (기본상태)


숫자키 2를 눌러 디버그 모드를 켰을 때




기왕 만들어놓은 2플레이어 난입도 가능하게 해 보겠습니다.

게임 중에 2플레이어가 화면에 없고, 2플레이어가 게임오버된 것이 아니라면 패드 버튼을 눌러서 2플레이어가 게임에 난입하게 합니다.

start2Player 함수를 준비해서 GameScene의 update에서 체크합니다. 2플레이어 생성의 조건은
- 패드 버튼이 눌렸다.
- 2플레이어가 게임오버 된 적이 없다. (나왔던 적이 없다)
- 현재 화면에 플레이어 캐릭터가 하나 있는데 태그가 0이다(==1플레이어) 혹은 플레이어 캐릭터가 없다 (1플레이어가 게임오버 상태)


이상의 조건을 클리어했으면 2플레이어를 생성합니다.


2인 동시 플레이 (※현 시점에서는 반드시 게임패드가 하나 필요합니다)



2인 동시 플레이에 맞춰 수정해야 할 내용이 있습니다.
아직 보여주지는 않고 있지만, 점수를 카운트해야 합니다.

그런데 이 네우로이는 누가 잡은 것일까?


누가 쏘더라도 총알은 Bullet이 나가고, 적의 입장에서는 자신을 파괴한 총알이 누가 발사한건지 알아야 파괴한 사람에게 점수를 줄 수 있습니다.

이 정보를 역추적하기 위해서, Bullet 클래스에 Player 변수를 추가하고, 생성자에 Player 객체를 인수로 받습니다.


그리고 setHit로 적 캐릭터에 타격을 줄 때, 이것을 인수에 포함시킵니다.

setHit에서 적 캐릭터의 소멸 판단을 했을 때, 플레이어 정보를 통해 해당 캐릭터에게 점수를 가산합니다. (막타!)


※이 과정에서 주의할 것은, 총알은 남아있지만 플레이어 캐릭터는 격추되어 사라졌을 수도 있습니다. 그때문에 인수로 들어온 플레이어 객체를 억세스하기 전에 null이 아닌지, 항상 검사해야 합니다. -> 사실 이런 점에서 보면, 격추된 플레이어를 벡터에서 지워버리는 건 좋지 않긴 합니다.

Player 클래스에서는 총알을 생성할 때, 인수에 자신을 포함시켜줍니다.
테스트 삼아 Player 클래스의 render에 자신의 정보를 추가로 보여주는 부분을 추가했습니다.


잠시 쉬어가는 기분으로-..는 어디까지나 개발 당시의 이야기고..- 자잘한 부분들을 손봤습니다.


※소스에 아마 버그가 있을텐데, GameScene에서 네우로이를 생성해주는 부분에 setInit가 변경된 부분이 있습니다.
아래에서 setInit 처음에 0, 를 인수로 추가해주면 됩니다.



핑백

덧글

댓글 입력 영역


Books

Geek라이프

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

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

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

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