Cocos2dx와 c++11를 이용한 게임 개발

58
Cocos2dx 와 C++11 와 와와와 와와 와와 와와와 : 25-2 와 와와와

Transcript of Cocos2dx와 c++11를 이용한 게임 개발

Cocos2dx 와 C++11 를 이용한 게임 개발

발표자 : 25-2 기 권태혁

개요• Cocos2d 개요• Cocos2d 선정배경• Cocos2d 개발환경 구축• Cocos2d 개발하기• C++11• Cocos2dx Hello World• Q&A

Cocos2d 개요Cocos2d 엔진이란 무엇인가 ?

Cocos2d• Game Engine

GUI 물리엔진 (Box 2d) Audio Engine

Scripting Editing(cocos)

Cocos2d HistoryIPhone (object-c)

Android (Only Java) Window (Only C++) Web (Only Javascript)

Window, Android, IPhone ( C++, Javascript)

Version 0.1

Cocos Family

Cocos2d OpenSource 결정Cocos2dx 1.0

HTML5 (Only Javascript)

Window, Android, Iphone,Windows Phone ( C++, Javascript)

Cocos2dx 1.1

Cocos2dx 3.3 Window, Android, Iphone,Windows Phone, Tizen ( C++, Javascript)

Cocos2d Cross-Platform

Branch Target Platform API Language

Cocos2d Windows, OS X, Linux Python 2.6, 2.7 or 3.3+,Objective-C

Cocos2d-xiOS, Android, Tizen, Win-dows 8, Windows Phone 8, Linux, Mac OS X

C++11,C++,Lua, JavaScript

Cocos2d-SpriteBuilder iOS, Mac OS X, Android Objective-C, SwiftCocos2d-html5 HTML5-ready browsers JavaScript

Cocos2d-xna Windows Phone 7 & 8, Windows 7 & 8, Xbox 360 C#

Cocos2d-x 선정배경약점과 강점

Cocos2d-x 선정배경• FREE• C++&C++11 Support• Tool Exists• Open Source• Cross Platform

Other Engine

단점• Build Unstable• Have So many Bugs• Chinese

Cocos2dx개발환경구축

Cocos2dx 개발환경 구축• http://www.cocos2d-x.org/download• Cocos2d-x 최신버전 다운로드 후 압축 해제

Python 2.X 버전 최신버전 설치

환경변수 PATH-> C:\Python27 등록

Apache ant• http://ant.apache.org/bindownload.cgi

ANT 를 압축을 푼 폴더 위치를 PATH 환경변수에 등록합니다 .

Cocos2dx 개발환경 구축• JDK 설치

JAVA_HOME 에 설치된 JDK 위치를 환경변수에 넣어줍니다 .그리고 꼭 ! 컴퓨터를 재시작 을 해야 됩니다 .

중간 결과

Android Studio

최종결과

Cocos2d 개발하기Cocos2dx Hello world 띄우기

Cocos Studio (cocos)

Coocs2dx 프로젝트 만들기

cocostudio

Hello world

Cocos2dx 구조

Ref = advanced AutoPtr

Pool ManagerPool Manager

Memorny1 Memorny2 Memorny3 Memorny4

Ref

(Static Function) Create

Managed Object ArrayRelease Stack

WHY?• Decoration Patton• Can Delete all

SuperClass

BaseClass

Extend 1 Class Extend 1 Class Extend 1 Class

Managed or Unmanaged• Managed Memory• 정의된 동작에 의해 삭제가 되어야 함• 직접 삭제를 하면 의존성 문제로 NULL 을 접근할 수 가 있음• 메모리 Leak 이 발생하지 않음

• Unmanaged Memory• 직접 모두 제거를 해줘야 함• 메모리관리가 매우 유용함 .• 메모리 Leak 이 발생할 수 있음

AppDelegateDirector

Scene

Node

Sprite

Animation

Button

behind code( 보이지 않는 영역 )

AppDelegate

Application

CSB??• ZIP 압축 파일• Resource 의 Layout.Json 및 이미지들을 저장함 .

• Scene 을 불러오거나 layout 을 불러올 때 사용

C++11C++ 의 새로운 표준

C++• 장점• 가장 강력하면서 모든 것을 구연할 수 있는 강력한 언어 !• 실행 속도가 빠름

• 단점• 현재 언어의 패러다임이

10 년전에도 늦음• 크로스 플렛폼 개발이 난해함• 생산성이 극도로 작음

Boost 란• OpenSource C++ Lib• 많이 사용하는 함수들을 라이브러리화 함• 대표적인 예제 • Foreach

• Boost 에서는 Define 정의 법으로 구현되어 있음 .• Lamda

• 익명 메소드 사용

Boost 활용 C++ 생상성 극대화 !

2007 ~ 2011• 수많은 검증과 테스트를 통과한 검증된 라이브러리 !• 하지만 방대한 라이브러리 80 개의 서브 라이브러리가 존재하며 그안에 들어있는 함수들은 나열할 수 없을 만큼 방대함

C++0x??• 00 부터 재정을 해서 09 년도에 완성을 하겠다 !!!!• 10 년 정도 조사하면 되지 않겠음 ?!!

는 Fail…

드디어 결정 !• C++11!• 문제없다 모든 것은 시나리오대로다

C++11• 왜 C++11 인가• ISO 에서 2011 년에 승인 났기 때문

C++11• C++98• 잘 알려지지 않음

• C++0x • Boost 라이브러리의 정규 라이브러리로 편입화 시도• 새로운 함수형 언어 시도

• C++11• 공식적으로 boost 라이브러리 일정 부분을 STL 로 인정함• 함수형 언어 디자인을 개발 가능하게 추가함

C++11 새로운 기능들

Boostforeach#include <string>#include <iostream>#include <boost/foreach.hpp>

int main(){ std::string hello( "Hello, world!" );

BOOST_FOREACH( char ch, hello ) { std::cout << ch; }

return 0;}

C++11 for each#include <iostream>int main(){ std::string hello( "Hello, world!" ); //for (char ch : hello) 이것도 된다 . for each (char ch in hello) { std::cout << ch; } return 0;}

Lambda• C#• 익명 메소드 + 델리게이트 와 같다 .

• 사용법• myButton->addTouchEventListener([=](Ref *pSender,

TouchEventType type){

myAnimationFinish->play(CCCallFunc::create([=]() { myButton->setvisible(false); }));});

Function 변수화• Std::function<void>(int count) PrintNumber;

PrintNumber = [=](int count){ printf(“%d”,count);};

PrintNumber(10); //10

PrintNumber = [=](int count){ printf(“%d”,count + 1);};

PrintNumber(10); // 11

C++11 Lambda in C++ boost

Var• var • 자바 스크립트에서 똑같은 var• 컴파일때 타입을 찾아 결정해줌• Ex) var temp = 1; //temp 는 int 결정해줌

C++ 으로 충분한데 왜 ?

Button

Login Button Next Button

Buy Button Pause Button

Cancel Button

Button

Click Event Function

Login Function

Next Function

Buy Function

Pause Function

C++ 으로 충분한데 왜 ?• 코드 간결화• 가독성 증가• Shared_Ptr, Mutex

결론1. C++11 활용하면 중복코드 없이 쉽게 개발이가능2. Cocos2dx 는 오픈소스 ! 버그가 있다면 직접 수정가능3. Andorid, IOS 에서도 호환가능한 프로젝트가 제작됨4. Managed Code, UnManaged Code 구분해서 개발 해야함 .

시연

Q&A