COCOS2D-X 를 사용한 캐주얼 게임 개발
이경민[email protected]
모바일 게임 포트폴리오
프로젝트 개요개발자 1 명 , 기획자 1 명COCOS2D-X 엔진으로캐주얼 게임 만들고 출시하기2 개월 프로젝트
프로젝트 개요
•내가 원하는 게임을 만들고 싶어서 .•게임의 기획부터 출시를 경험하기 위해서 .•COCOS2D-X 엔진을 실사용 해보려고 .
목적
프로젝트 개요
• 2 개월 안에 앱스토어에 출시한다 .•양방향 탭으로만 조작하는 간단한 게임을 만들자 .
목표
프로젝트 개요
개발 100% 전담• 클라이언트 개발 , iOS 출시 , 안드로이드 포팅과 출시
기획 50% 참여• 게임 스토리 , 게임 방식 , 스테이지 레벨링 방식
내가 맡은 역할은 ?
프로젝트 개요
•Xcode 에서 개발• Eclipse 를 통한 안드로이드 포팅• COCOS2D-X 3.10 사용
개발 환경
프로젝트 개요기간 내용 기간 내용
1 주차(6 월 3
주 )
• COCOS2D-X 스터디 5 주차(7 월 3
주 )
• 몬스터 출현 시스템• UI 수정• 스테이지 1 완료
2 주차(6 월 4
주 )
• COCOS2D-X 스터디• 기획 초안 작성• 리소스 수집
6 주차(7 월 4
주 )
• 스테이지 2, 3, 4 레벨링• 나머지 씬들 추가
3 주차(7 월 1
주 )
• 스테이지 배경• 오브젝트 조작과 패턴• 오브젝트 충돌 처리
7 주차(8 월 1
주 )
• ad-hoc 배포후 테스트 • 앱스토어 리뷰 신청• 앱스토어 출시
4 주차(7 월 2
주 )
• UI 추가• 게임 방식 변경• 변경한 방식으로 수정
8 주차(8 월 2
주 )
• V.1.0.1 업데이트• 안드로이드 포팅과 출시 • V.1.0.2 업데이트
2 개월간의 프로젝트 일정
2 주 준비 , 5 주 개발 , 1 주 포팅 및 버그 수정
프로젝트 결과
•양방향 탭으로 조작하는 간단한 게임 !•낙하하는 몬스터를 피하면서 제거해야 한다 .
프로젝트 결과
• 2016.08.06 출시• 다운로드 156 건• 리뷰 14 건
앱스토어• 2016.08.11 출시• 다운로드 85 건• 리뷰 17 건
구글 플레이
출시 결과
프로젝트 결과
몬스터를 피하는 재미요소가 부족하다 .• 몬스터 종류를 늘리는 동안 , 패턴을 디테일하게 설정하지 못했다 .
플레이 시간이 짧다 .• 다시 플레이할 이유가 랭크 고득점 밖에 없다 .
보완할 부분
타겟 디바이스•아이폰 5 iOS 9•갤럭시 넥서스 안드로이드 4.0 ICS
선정한 이유 ?• 보유중인 기기라 테스트하기 편해서 .• 구형 이지만 아직 사용자가 많아서 .
•아이폰 5 해상도 1136 * 640
•대부분의 스마트폰 화면비율 16:9
게임 해상도기준 해상도
COCOS2D-X 의 해상도 대응 기능을 사용해서고정 비율로 화면에 맞추어 확대 또는 축소한다 .
게임 해상도다양한 해상도 대응
게임 해상도해상도 대응 결과
해상도 크기만 다르면 ?• 화면에 맞게 확대 , 축소 된다 .
화면 비율이 다르면 ?• 화면 위 , 아래에 레터박스가 보인다 .
게임 방식초기 기획
•등뒤를 공격받으면 죽는다 !•양방향에서 몰려오는 몬스터들과 격투 !
게임 방식
•플레이어의 격투 방식이 재미없다 .•몬스터의 출몰이 단순하다 .•보스가 등장까지 오래걸린다 .
초기 기획의 문제점
게임 방식기획 변경
낙하하는 몬스터를 피하고 레이저건으로 공격 !
초기 기획변경된 기획
게임 목표
•보스를 제거하고 UFO 를 되찾아라 !•더 빨리 클리어 해서 높은 랭크를 획득하자 !
게임 목표
•클리어 시간 기준으로 랭크가 결정된다 .•D 랭크부터 다음 스테이지가 열린다 .
Rank 시간 난이도 레벨SS 00’00’’ ~ 01’00’’ LV 9S 01’01’’ ~ 01’15’’ LV 8, 9A 01’16’’ ~ 01’40’’ LV 7, 8B 01’41’’ ~ 02’20’’ LV 6, 7C 02’21’’ ~ 03’00’’ LV 4, 5, 6D 03’01’’ ~03’40’’ LV 2, 3F 03’41’’~ 05’00’’ LV 1
랭크 시스템
씬 (Scene) 구성
•MainMenu 메뉴 씬•StageIntro 인트로 씬•Stage 게임이 진행되는 씬•GameOver 게임 오버 씬•Result 게임 결과 씬
5 개의 씬으로 게임 구성
씬 (Scene) 구성
MainMenu
ResultGameOver
StageIntro Stage
씬의 흐름
스테이지 씬
•게임이 진행되는 무대다 . •레이어 4 개로 구성된다 .•배경을 스크롤 해서 역동감을 준다 .
스테이지 씬
레이어 4 - 씬의 기본 레이어 , UI
레이어 1 - 배경1
레이어 2 - 배경 2
레이어 3 - 스테이지 ( 플레이어 , 몬스터 )
레이어 구성
스테이지 씬레이어 1 - 배경 1레이어 2 - 배경 2레이어 3 - 스테이지
레이어 3, 2 의 속도 비율을 1 : 0.3 으로 설정한다 .• 레이어 2 가 더 느리게 스크롤 된다 .
cocos2d::ParallaxNode 로 배경 스크롤 하기
오브젝트
모든 오브젝트는 스프라이트 이미지로 표현된다 .• cocos2d::sprite 를 상속 받아 사용한다 .
오브젝트를 편리하게 관리하려면 ?• 오브젝트 클래스를 추상 클래스로 설계한다 .
오브젝트 클래스 설계
오브젝트cocos2d::spri
te
CPlayer CLaser CMonster
CMon-ster01
CMon-ster02
CMon-ster03
CObject
…
CObject 클래스 구조
오브젝트
공장처럼 여러 타입의 객체를 빠르게 찍어낸다 .• 오브젝트를 편리하게 생성할 수 있다 .
객체 팩토리 패턴 (Object Factory Pattern)
오브젝트
오브젝트는 수시로 증가 또는 감소한다 .• Vector 로 다수의 오브젝트를 관리하자 .
CObject 클래스는 cocos2d::sprite 를 상속 받았다 .• STL Vector 보다 cocos2d::Vector 가 편리하다 .
cocos2d::Vector 컨테이너
오브젝트
바운딩 박스 : 이미지의 전체 범위• getBoundingBox() 로 얻는다 .
충돌 박스 : 충돌 처리의 기준 범위• 바운딩 박스를 작게 조절해서 사용한다 .
바운딩 박스충돌 박스
앵커 포인트
충돌 범위
오브젝트
intersectsRect() 로 대상과 충돌 검사를 하고true 리턴시 충돌 처리한다 .
충돌 박스로 충돌 처리하기
intersectsRect() ➡ true
오브젝트
몬스터와 플레이어 충돌• 플레이어 사망몬스터와 레이저 충돌• 레이저 제거 , 데미지 적용
충돌 검사 대상과 처리 방법
플레이어
탭 방향으로 공격후 반대 방향으로 넉백된다 .
우측으로 넉백좌측 탭 !
좌측으로 발사
공격 모션
플레이어•SUMMON: 소환 모션• IDLE: 조작 대기•PROGRESS: 공격
모션•DEATH: 사망 모션
4 가지 상태로 상태머신 구성
플레이어
SUMMON
IDLE
PROGRESS
DEATH
Collision
Collision
At-tack
상태머신의 흐름
스킬 공격• 레이저가 최대로 폭발한 1 프레임 동안에만 충돌 검사한다 .
플레이어
기본 공격• 충돌시 DEATH 상태로 전이되어 충돌 검사에서 제외된다 .
레이저건 중복 충돌 막기
몬스터•SUMMON: 소환 모션• IDLE: 공격 대기•PROGRESS: 공격 모션•GETHIT: 타격 모션•STUN: 스턴 모션•DEATH: 사망 모션
6 가지 상태로 상태머신 구성
상태머신의 흐름몬스터
SUMMON
IDLE
PROGRESS STUN
GETHIT
DEATHHP <= 0
Collision
Collision
몬스터
•Move, Jump, Fly, Dig, Burrow, Stay•몬스터는 고유의 진행패턴을 가진다 .
6 종류 진행패턴으로 몬스터 분류
몬스터
대기 , 이동을 반복한다 .
Move 패턴
IDLEIDLE PROGRESS
대기 , 점프를 반복한다 .
Jump 패턴
IDLEIDLE PROGRESS
몬스터
대기 , 비행을 반복한다 .
Fly 패턴
IDLEIDLE PROGRESS
땅속 대기 , 이동을 반복한다 .
Dig 패턴
IDLEIDLE PROGRESS
몬스터
땅속 대기 , 공격을 반복한다 .
Burrow 패턴
IDLEIDLE PROGRESS
제자리에 고정 된다 .
Stay 패턴
몬스터
소환 주기• 일정 주기 마다 소환되며 , 고난이도일수록 소환 주기가 짧다 .
획득 점수• 획득 점수로 게이지를 채우며 , 고난이도일수록 점수가 크다 .
난이도에 따라 변화하는 요소
몬스터
소환주기와 획득 점수로 난이도를 조절하므로HP, 이동 속도는 고정한다 .
변화하지 않는 요소
난이도 레벨링
몬스터의 소환 주기• 자주 소환될수록 개체가 많아져서 피하기 어렵다 .
플레이 시간• 오래 걸릴수록 집중력이 떨어져서 조작이 어렵다 .
난이도에 영향을 주는 요소
난이도 레벨링
1. 몬스터 소환 주기 결정2. 목표 시간 결정3. 목표 시간으로 적정 점수 계산4. 점수 등록 후 테스트
난이도 레벨링 순서
난이도 레벨링
1. 소환 주기 입력 ➡ 분당 소환수2. 점수 비율 입력 ➡ 필요 점수3. 목표 시간 입력 ➡ 분당 필요 점수4. 적정 점수 = 분당 필요 점수 / 분당 소환수
적정 점수 계산