Cocos2d x a to z (상)

22
week2 게게게게 cocos2d-x 게 게게게게 게게게

description

이야아아아아아

Transcript of Cocos2d x a to z (상)

week2게임엔진 cocos2d-x 의 개념적인 부분들

cocos2d-x?

• 유래• 역사• 정도는 제끼고 넘어가는걸로

cocos2d-x 2.x? 3.x?

• 2.x• 모바일 게임엔진으로써 1.x 에서 일어나는 퍼포먼스 문제를 해결하기 위해

나옴 (1.x 버전은 2011 년 중순까지 30fps 가 한계였다 .)• 당시 모바일 cpu 들이 싱글코어였기 때문에 이에 맞춰서 개발됨 .

• 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 하게 개발하는것에 초점이 맞추어져있다 .

cocos2d-x 2.x? 3.x?

• 사실은 그냥 신버전이니까 더 나아졌겠거니 하고 3.x 를 쓰기로 한다 .

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 군의 은밀한 블로그

cocos2d-x 구조

• cocos2d-x 는게임에 필요한 모든 객체들을 지원한다• Sprite• SpriteBatch• Action (Animation, Event)• Camera• Layer• Scene• ParticleSystem• Physics (Chipmunk, Box2d, LiquidFun)

cocos2d-x 구조• cocos2d-x 는게임에 필요한 모든 객체들을 지원한다

• Sprite • SpriteBatch • Action (Animation, Event) • Camera • Layer • Scene • ParticleSystem • Physics (Chipmunk, Box2d, LiquidFun)

• Useless ( 이유는 추후 설명 )

cocos2d-x 구조• 위 모든 객체들은 cocos2d-x 내의 Node 객체를 상속받아

구현된다 .• 자세한 부분은 아래 링크 참조 (2.1.4 기준 class diagram)• http://plming.tistory.com/57

cocos2d-x 의 장점과 단점

• 장점• 여타 엔진 대비 엄청나게 낮은 진입장벽• 잘 되어있는 문서화 (http://cocos2d-x.org/docs/README)• 이미 많은 사람들이 먼저 경험한 문제와 그에대한 해결방법들

• 단점• 잦은 버그 ( 이후 사례 소개 )• 다른 버전에 대한 포팅의 어려움

cocos2d-x 의 장점• 여타 엔진 대비 엄청나게 낮은 진입장벽• cocos2d-x 와 비교할 엔진 : Unity3D

• Unity3D 는 실제 개발에 투입될때 GUI 의 사용법과 3D 뷰를 자유롭게 컨트롤 할 수 있어야 함 . Component 방식의 개발 방법도 학습코스트가 그리 낮지 않다 .

• cocos2d-x 는 C++ 을 사용할줄 안다면 아주 손쉽게 ( 깔끔하게는 아니다 ) 게임개발을 시작할 수 있다 . 극단적으로 보면 addChild 만 쓸줄알면 게임 개발이 가능함

cocos2d-x 의 장점• 잘 되어있는 문서화

• 요즘 잘 안되어져 있는 문서가 어딨겠냐마는 , cocos2d-x 는 자체적으로 한국어 document 지원

• http://cocos2d-x.org/docs/README

cocos2d-x 의 단점• 버그

• 실제로 2.x 쓸때 Animation 의 프레임이 일정 수준 이상 넘어가면 자기 멋대로 돌아가는 현상 발생 .

• 직접 Animation 시스템을 개발해 쓰는것을 추천하기도 함• 포팅의 어려움

• Unity3D 는 버튼 한번만 누르면 apk 가 떨어지는데 반해 , cocos2d-x 는 apk 한번 떨구기까지의 과정도 험난하며 실행시 각종 버그 터짐 . 다시한번 디버깅을 하는 과정도 쉽지않다 .

cocos2d-x 에 대해서 쓸모있을 상식들• 기초적인 요소들

• Scene Graph • Director • Layer • Node • Scene • Sprite

• 2.x -> 3.x 의 내부적인 요소• Renderer 와 Scene Graph 분리• Auto Batching• Auto Culling

Renderer 와 Scene Graph 분리(RenderQueue)• 3.x 가 되면서 기존 Scene Graph 와 Renderer 를 분리함• RenderQueue 와 CommandQueue 를 개발했고 , 더이상

렌더링하는동안 OpenGL 을 직접 부르지 않게 되었다 .

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 는 그려진다 .

Auto Culling

• 2.x• Camera 에 잡히지 않는 객체들은 그동안 프로그래머가 직접 필터링해왔다 .

• 3.x• 카메라에 보여지지 않는 객체는 자동으로 현재 프레임에서 삭제해

그려지지 않도록 되었다 .• 정확히 말하면 , 내부적으로 AABB 에 집어넣어 false 를 반환하면

RenderQueue 에 집어넣지 않는다 .

Scene graph - Director

• http://www.cocos2d-x.org/wiki/Director• Scene 들을 관리해주는 역할을 맡는다 .• 역할이 역할이니만큼 Singleton 으로 구현되어져 있다 .• Director 로 Scene 을 Push 하면 이전에 Active 상태에 있던 Scene 은

알아서 Pause 상태로 들어간다 .• 기존 Scene 을 Pop 해주면 이전 Scene 은 Active 상태로 돌아온다 .

Scene graph - Layer

• http://www.cocos2d-x.org/wiki/Layer• 기존 Layer 는 ui 의 용도로 쓰였다 . ( 터치 이벤트 기능 때문에 )• 하지만 3.x 부터는 모든 node 가 터치 이벤트를 받을 수 있기 때문에

Layer 를 쓸 이유가 급격히 줄어들었다 . • 추후 Deprecated 로 들어갈 예정 .

Scene graph - Node

• http://www.cocos2d-x.org/wiki/Node• TBD

Scene graph - Scene

• http://www.cocos2d-x.org/wiki/Scene• 실제로 Sprite 와 함께 가장 큰 비중을 차지하는 녀석 .• Scene 과 Sprite 만 준다면 게임을 만들 수 있기는 하다 .• Director 에서 관리한다 .• Scene 에 Sprite 를 addchild 한다 . 모든 스프라이트의 엄마아빠다 .• Scene 들의 순서를 나열하는것 만으로 게임 플로우로 쓸수있다 .• CCNode 의 Subclass 이기 때문에 CCActions 사용가능 ( 화면

전환효과 )

Scene graph - Sprite

• 캬 나왔다• cocos2d-x 의 95% 다 . 움직이고 , 돌리고 , 키우고 , 애니메이션 ,

불투명도 조절 다 해줄수 있다 . • 게임 개발시 모든 게임 오브젝트는 Sprite 를 상속받아

개발해두면 향후 편리하다 . ( 게임 내 오브젝트들을 List<Sprite> 로 묶어 관리해줄수 있음 )