프로그래밍/Cocos2d-x

cocos2d)삼국지디펜스 레포트

redjam0123 2017. 4. 6. 02:04

 

2015.06.07. 08:39

 

REPORT

 

*제작기간: 3월 중순~ 6월 말

*목표게임:삼국지 디펜스 for kakao(올해 2월경 구글스토어 출시.)

 

1. 장르 정의 

디펜스 게임(Defence Game)은 본래 게임 레벨 디자인(Level Design)의 기법으로, 1인칭 슈팅 게임(FPS, First Person Shooter)이나 실시간 전략 시뮬레이션(RTS, Real-Time Strategy) 장르에서 몰려오는 적군을 막아내는 것을 뜻한다.  이중 타워 디펜스(Tower Defence) 는 디펜스 게임의 하위 개념으로 타워를 지어 일정한 경로로 몰려오는 적군을 막아내는 게임이다.

2. 구성 및 플롯차트

ppt 첨부.


제작 프로그램은 cocos2d 0.9버전으로 현재 버전인 cocos2d X와 유사하다. 구성요소는 크게 Tower, Hero, Unit, Enemy 4가지로 나뉘며, 위의 pt는 게임의 플롯차트이다.

 

3. 기본요소 제작 

먼저 타워디펜스의 기본인 Tower, 탑 위에서 공격할 Hero, 아군 Unit, 적군 Enemy 를 각각 Object로 만들어주었다. 

 

 

 

cocos2d 에서의 각각의 게임씬과 배경, 주인공들은 포토샵의 layer와 비슷하다.

배경 또한 가장 기초인 m_pGround의 위로 올라간다(Scene->_pGround->BGA->etc...순).

포토샵과 비교를 하자면 Scene은 캔버스, m_pGround는 배경Layer라 볼수 있다.

이후 일반적인 스프라이트는 CCSprite::spriteWithFile로 붙일수 있는데 png형식만 가능하니 주의한다. 

 

 

애니메이션은 일반 1장의 단순 스프라이트와는 다르게 여러장의 스프라이트를 CCAnimation으로 연결해준다. 중심점과 크기 등을 맞추어 여러장의 그림을 저장하고

pAin->addFrameWithTexture로 객체를 움직인다.


 

위는 각각의 Object를 포인터로 연결해서 위치를 지정한 후, m_pGround에 addchild로 붙여준것이다.

 

4. Object_Hero

 

 

여기서 enum에는 각각 객체의 상태를 구별한 tag가 들어있다. Hero같은경우 대기상태STAND, 공격 전후 ATTACK1,2가 있다.

삼국지 디펜스의 hero는 다른 디펜스와는 다르게 hp나 이동이 없다. 공격 또한 일반공격과 시간에 따라 채워지는 게이지를

소비하여야만 쓸수 있는 불화살, 두가지 밖에 없는데 공격을 맞추기 위해서는 조준점이 필요하다.

 

 

스마트폰 전용 app을 컴퓨터로 옮겨 구현한 것이기 때문에 터치 대신 space키가 눌릴때 조준점의 sprite가 뜬다.

GetAsyncKeyState가 true가 되면 조준점이 있는지 없는지를 먼저 검사후 없으면 조준점을 붙인다.



(직접 그린 그림.)

 

이후 조준점은 키가 눌린 동안 일정각도 이내에서 움직인다.

50도 이하의 범위로 넘어가면 m_bChageWay를 true로 바꾸어주어 움직이는 방향을 반대로 바꾸고 각도를 2씩 증가시킨다.

이후 180도를 넘어가면 방향을 반대로 바꾸어주고 각도를 2씩 감소시키는데 이를 키가 눌린동안 계속 반복한다.

 

5. 조준점

Object_Arrow 화살은 조준점을 놓은 지점으로부터 일직선으로 발사된다. 원래라면 포물선을 그리며 발사되어야 하지만 맵이 작은관계로 일직선으로 발사되게 만들었다.

(수학필기)

 

6.Object_Enemy, EnemyManager

여러마리인 Enemy를 관리하기위해 Singleton을 이용한 Manager를 만들어주었다.

EnemyManager 를 share, 즉 call하여 매니저의 함수를 다른 object에서도 사용할수 있다.

0번째 부터 enemy의 여부를 검사후 없으면 new로 동적할당, init으로 초기화를 해준다.



 

이후 아군도 유사하다.

 

7. Collision_Check

-Arrow->Enemy

-Unit->Enemy

-Enemy->Unit

-Enemy->Tower

왼쪽은 공격하는 대상이고 오른쪽은 공격받는 대상이다. 타워의 HP를 0까지 감소시키면 게임이 클리어 되고 다음 스테이지로 넘어가게 된다.