3. cocos2d-x 2.x? 3.x?
• 2.x
• 모바일 게임엔진으로써 1.x에서 일어나는 퍼포먼스 문제를 해결하기
위해 나옴 (1.x버전은 2011년 중순까지 30fps가 한계였다.)
• 당시 모바일 cpu들이 싱글코어였기 때문에 이에 맞춰서 개발됨.
4. • cocos2d-x 2.x? 3.x?
• 3.x
• 2.x의 낡은 디자인 방식, 현대의 멀티코어 태블릿PC, 모바일 기기를
지원하기 위해 나옴
• performing, elegant, scalable, flexible but still simple to use and to
understand 하게 개발되었다. 고 cocos2d-x 3.0 로드맵에 쓰여져있다.
정말 개발자가 쓴것같다.
• 이전 버전과 comfortable하게 개발하는것에 초점이 맞추어져있다.
6. cocos2d-x 인스톨
• 설치
• only pc
• cocos2d-x 다운로드. 압축 해제 후 터미널을 이용해 cocos2d-x 폴더로 가서
cocos new -l [language] 진행
• 만약 다른 디바이스로 포팅 계획이 있다면
• Android SDK, Android NDK, Apache ANT필요
• http://riniblog.egloos.com/viewer/1075865 참고
• Rini군의 은밀한 블로그
7. cocos2d-x 구조
• cocos2d-x 는게임에 필요한 모든 객체들을 지원한다
• Sprite
• SpriteBatch
• Action (Animation, Event)
• Camera
• Layer
• Scene
• ParticleSystem
• Physics (Chipmunk, Box2d, LiquidFun)
8. cocos2d-x 구조
• cocos2d-x 는게임에 필요한 모든 객체들을 지원한다
• Sprite
• SpriteBatch
• Action (Animation, Event)
• Camera
• Layer
• Scene
• ParticleSystem
• Physics (Chipmunk, Box2d, LiquidFun)
• Useless ( 이유는 추후 설명)
9. cocos2d-x 구조
• 위 모든 객체들은cocos2d-x 내의 Node 객체를 상속받아
구현된다.
• 자세한 부분은 아래 링크 참조 (2.1.4 기준 class diagram)
• http://plming.tistory.com/57
10. cocos2d-x의 장점과 단점
• 장점
• 여타 엔진 대비 엄청나게 낮은 진입장벽
• 잘 되어있는 문서화 (http://cocos2d-x.org/docs/README)
• 이미 많은 사람들이 먼저 경험한 문제와 그에대한 해결방법들
• 단점
• 잦은 버그 (이후 사례 소개)
• 다른 버전에 대한 포팅의 어려움
11. cocos2d-x의 장점
• 여타 엔진 대비 엄청나게 낮은 진입장벽
• cocos2d-x와 비교할 엔진 : Unity3D
• Unity3D는 실제 개발에 투입될때 GUI의 사용법과 3D 뷰를 자유롭게
컨트롤 할 수 있어야 함. Component 방식의 개발 방법도 학습코스트가
그리 낮지 않다.
• cocos2d-x는 C++을 사용할줄 안다면 아주 손쉽게(깔끔하게는 아니다)
게임개발을 시작할 수 있다. 극단적으로 보면addChild만 쓸줄알면 게임
개발이 가능함
12. cocos2d-x의 장점
• 잘 되어있는 문서화
• 요즘 잘 안되어져 있는 문서가 어딨겠냐마는, cocos2d-x는 자체적으로
한국어 document 지원
• http://cocos2d-x.org/docs/README
13. cocos2d-x의 단점
• 버그
• 실제로 2.x 쓸때 Animation의 프레임이 일정 수준 이상 넘어가면 자기
멋대로 돌아가는 현상 발생.
• 직접 Animation 시스템을 개발해 쓰는것을 추천하기도 함
• 포팅의 어려움
• Unity3D는 버튼 한번만 누르면 apk가 떨어지는데 반해, cocos2d-x는
apk한번 떨구기까지의 과정도 험난하며 실행시 각종 버그 터짐. 다시한번
디버깅을 하는 과정도 쉽지않다.
14. cocos2d-x 에 대해서 쓸모있을 상식들
• 기초적인 요소들
• Scene Graph
• Director
• Layer
• Node
• Scene
• Sprite
• 2.x -> 3.x의 내부적인 요소
• Renderer와 Scene Graph 분리
• Auto Batching
• Auto Culling
15. Renderer와 Scene Graph 분리(RenderQueue)
• 3.x가 되면서 기존 Scene Graph와 Renderer를 분리함
• RenderQueue와 CommandQueue를 개발했고, 더이상
렌더링하는동안 OpenGL을 직접 부르지 않게 되었다.
16. Auto batching
• 3.x에서 Auto Batching이 구현되어, 더이상 SpriteBatchNode를 쓸
필요가 없어졌다.
• 원리
• 1개의 Quad는 3개의 속성을 갖는다 -> vertex(x,y,z), (u, v), color(rgba).
• 새로운 Quad를 Buffer에 만든다.
• 새로운 quad와 이전의 quad를 비교해 같은 material을 사용하면 아무런
일도 일어나지 않고 넘어간다.
• 그러나 material이 다르다면 quad는 그려진다.
17. Auto Culling
• 2.x
• Camera에 잡히지 않는 객체들은 그동안 프로그래머가 직접
필터링해왔다.
• 3.x
• 카메라에 보여지지 않는 객체는 자동으로 현재 프레임에서 삭제해
그려지지 않도록 되었다.
• 정확히 말하면, 내부적으로 AABB에 집어넣어 false를 반환하면
RenderQueue에 집어넣지 않는다.
18. Scene graph - Director
• http://www.cocos2d-x.org/wiki/Director
• Scene들을 관리해주는 역할을 맡는다.
• 역할이 역할이니만큼 Singleton으로 구현되어져 있다.
• Director로 Scene을Push하면 이전에 Active상태에 있던 Scene은
알아서 Pause상태로 들어간다.
• 기존 Scene을 Pop해주면 이전 Scene은Active상태로 돌아온다.
19. Scene graph - Layer
• http://www.cocos2d-x.org/wiki/Layer
• 기존 Layer는 ui의 용도로 쓰였다. (터치 이벤트 기능 때문에)
• 하지만 3.x부터는 모든 node가 터치 이벤트를 받을 수 있기 때문에
Layer를 쓸 이유가 급격히 줄어들었다.
• 추후 Deprecated로 들어갈 예정.
20. Scene graph - Node
• http://www.cocos2d-x.org/wiki/Node
• TBD
21. Scene graph - Scene
• http://www.cocos2d-x.org/wiki/Scene
• 실제로 Sprite와 함께 가장 큰 비중을 차지하는 녀석.
• Scene과 Sprite만 준다면 게임을 만들 수 있기는 하다.
• Director에서 관리한다.
• Scene에 Sprite를 addchild한다. 모든 스프라이트의 엄마아빠다.
• Scene들의 순서를 나열하는것 만으로 게임 플로우로 쓸수있다.
• CCNode의 Subclass이기 때문에 CCActions 사용가능(화면 전환효과)
22. Scene graph - Sprite
• 캬 나왔다
• cocos2d-x의 95%다. 움직이고, 돌리고, 키우고, 애니메이션,
불투명도 조절 다 해줄수 있다.
• 게임 개발시 모든 게임 오브젝트는 Sprite를 상속받아 개발해두면
향후 편리하다. (게임 내 오브젝트들을 List<Sprite>로 묶어
관리해줄수 있음)