상세 컨텐츠

본문 제목

Cocos2d-x 개발환경

program

by seongchan 2012. 12. 18. 15:41

본문

* Cocos2d-x에 대한 전반적인 얘기는 여기서는 다루지 않는다. 이에 대한 상세한 얘기는 http://cocos2d-x.org에서 확인한다.


 

 Cocos2d family (이미지 출처 : http://cocos2d-x.org)


Cocos2D는 2D기반의 그래픽 엔진이다. 주로 게임을 구현할때 사용되는 라이브러리로 사용하는데, canvas기반으로 애플리케이션을 구현을 하고자 할때에도 유용하게 사용할 수 있을듯 하다.( 뭔가 구현을 하고자 할때도 사용할 수 있는 엔진이다. (실제 View나 시나리오에 따라서 나올뿐 일반 애플리케이션을 구현할때라도 사용하는데에는 문제는 없다. 어떻게 활용하는가에 따라서 다를듯 하다.)


Android환경에서 Cocos2D를 이용하고자 하는 게 Cocos2d-android가 있긴 한데(이건 Cocos2d-iphone과 같이 Android 용 port로 이해하면 될 것 같다.) 이 port도 사실상 중단된것 같다. 


Cocos2D가 Cocos2d-X로 나오면서 멀티플랫폼에서도 동작할 수 있는 환경을 제공한다.

이 부분은 Core단은 기존과 동일한데, 타 플랫폼에서도 동작할 수 있는 port를 추가했다고 보는게 더 맞을듯 하다.

즉, Core에 해당하는 부분이 바뀌었다고 보긴 어렵고, Core가 동작할 수 있는 하위 port(플랫폼 이식 부분)과 상위의 인터페이스 부분을 정리한 것으로 보면 될 것 같다.(이게 이해하는데에 더 쉬울듯)


대략적인 형태로 본다면, 



실제 이게 안드로이드 플랫폼에서라면 다음과 같은 형태로 배치되는 것으로 이해할 수 있다.




멀티플랫폼 지원

Cocos2D-X는 멀티플랫폼을 지향한다. 

멀티 플랫폼지향이라는 부분은 두가지의 관점에서 생각해 볼 수 있다.


단일 소스에서의 다중 플랫폼 지원

원래 Cocos2D에서 의도했던 부분은 단일 소스에서의 다중 풀랫폼 지원을 의미한다.

핵심(코어)에 해당하는 부분은 동일한 코드로 유지하고, 각 플랫폼 특성에 따른 커스터마이징으로 작업이 가능하다면, 단일 소스의 다중 풀랫폼 지원이라 얘기할 수 있다. 


다중 플랫폼에서의 인터페이스 지원

이 부분은 플랫폼적인 요소 보다는 개발할때 지원가능한 언어라고  얘기하는게 더 맞을듯 하다.

사용하고자 하는 라이브러리가 C만 지원한다면, C보다는 자바에 익숙한 사용자라면 개발환경 자체를 이해하고 그에 맞게 작업을 하기에는 무리가 있다. Cocos2D-X는 자체적으로 C++로 구현되어 있으나, 상위의 인터페이스 부분이 자바로도 가능하도록 인터페이스가 열려 있다. 이 부분은 C와 Java 간 인터페이싱 되는 JNI를 통해서 가능하다.[각주:1]


약간은 다른 형태이긴 하나 Cocos2D-HTML5도 있긴 하다. 이 부분은 순수하게 자바스크립만으로 라이브러리(.js)가 구성이 되어 있다. 모바일웹으로 2D를 구성한다면 Cocos2D-HTML5도 대안이 될듯 하다. 


결국은 Cocos2D를 채택하는 것에 있어서 어디로 접근하는가는 채택하는 주체에 따라서 다를듯 하다.

다만, 어느 방향이든 간에 한쪽만 이용하는데에는 일부 제약이 있을듯 하고, 양쪽 부분을 어느정도 손을 대야 할듯 하다.


개발환경

최종 대상이 안드로이드이고, 개발환경이 OSX 이고,  C/C++, Java(안드로이드) 기반으로 작성하고자 하는 개발자의 경우로 가정하였다. 

윈도 환경에서 Cygwin을 사용하는 것도 있으나, 기본적인 부분은 유사하기 때문에 Cygwin에 대해서는 별도 언급하지 않는다.


준비사항

안드로이드 개발환경을 설치한다.

별로의 라이브러리를 빌드해야 하기 때문에 SDK와 함께 NDK도 같이 설치한다.  IDE는 이클립스를 이용한다.


Cocos2D-X 다운로드 및 설치

http://cocos2d-x.org 에서 최신버전을 다운로드 받는다. 

압축된 파일은 작업하고자 하는 임의의 디렉토리에 압축한다.

압축 해제한 디렉토리에 보면 몇개의 스크립트 파일이 있다.



iOS 대상으로 개발을 하고자 한다면, install-template-xcode.sh를 콘솔에서 실행한다. 스크립트 실행이 끝나면, Xcode에서 Cocos2d가 템플릿이 추가 된것을 볼 수 있다.



안드로이드의 경우는 별도 설치과정은 없다. 다만, 프로젝트를 생성하고 추출된(?) 소스로 NDK환경을 이용하여 C/C++코드를 빌드하여 라이브러리를 빌드하고, 최종적으로 생성된 라이브러리를 이용하는 형태다.

C/C++ 코드에서 작업을 할지, 아니면 기본라이브러리만 만든 후에 자바 환경으로 개발할지는 상황에 따라서 다를듯 하다. 어느 쪽 코드를 수정하던간에 빌드하는 방식은 같다.


Cocos2D-X를 이용해서 프로젝트 생성하기

Xcode환경과 달리 안드로이드의 경우 프로젝트 생성부터 시작한다.

프로젝트 생성을 위해서 사용할 create-android-project.sh 파일에서 현재 개발환경에 맞게 환경값을 수정한다.


다음의 두개의 값을 현재 개발환경에 맞게 값을 수정한다.


NDK_ROOT_LOCAL="/Applications/Android_Dev/ndk"

ANDROID_SDK_ROOT_LOCAL="/Applications/Android_Dev/sdk"


다른 설명글에서는 이 부분만 명시되어 있는데, 여기서 하나 더 추가를 한다.


cp -R cocos2dx/platform/android/java/src/org/cocos2dx/*$PROJECT_DIR/proj.android/src/org/cocos2dx/


create-android-project.sh 에서는 

사용자 입력을 받아서 안드로이드 SDK의 android 명령을 통해서 프로젝트를 생성하고, 생성된 프로젝트 경로에 cocos2D-X 의 소스 파일을 복사하는 과정을 거친다. C/C++ 코드는 NDK를 이용해서 .so형태의 라이브러리를 생성할 때 사용한다. (또 별도 작성한 C 코드도 추가해서 라이브러리 파일에 추가할 수 있다)

그러나 Java와 인터페이싱 되는 JNI 파일은 복사가 되나, Cocos2D-X의 자바라이브러리파일은 복사되지 않는다. 이 부분이 스크립트의 버그인지는 모르겠으나, 실제 자바 인터페이싱 할 파일이 있어야 작업이 가능하니, 자바라이브러리 파일이 복사가 될 수 있게 처리한다.

(사실 따로 복사해도 무방하긴 하다. 위에 복사항목을 추가하지 않은 상태에서 생성된 프로젝트 소스내에 org/cocos2d/lib 디렉토리가 없거나, 디렉토리내에 .java 파일이 없다면, 필요한 파일이 복사된게 아니니 원본 경로에서 파일을 복사한다.)

생성된 프로젝트는 다음과 같은 형태로 구분되어 있다.


 


  • Classes : C 코드 파일이다. Cocos2D-X 제공되는 부분 외에 직접 작성하고자 하는 C/C++ 소스는 여기 추가하거나 수정을 한다. 
  • proj.android : 안드로이드 프로젝트 디렉토리이다. 이클립스에서 자바코드의 프로젝트 생성시 이 디렉토리를 root로 잡고 import 시키면 된다.
  • Resources : C/C++ 코드에서 참조하는 자원 파일이다. 이 파일은 라이브러리 파일에서 조회되는 자원이기 때문에 안드로이드 빌드시에는 assets 디렉토리에 복사되어 빌드된다.

NDK 빌드하기 위해서는 안드로이드 프로젝트 디렉토리(proj.android)에 있는 build_native.sh 파일을 실행한다. 여기서도 주의할 점은 NDK경로가 스크립트 파일내에 지정되어 있지 않아, 다음과 같이 NDK_ROOT 경로를 추가해야 한다.


NDK_ROOT="/Applications/Android_Dev/ndk"

(경로 위치는 NDK가 설치된 위치를 기입해 주면 된다)


수정된 build_native.sh를 실행하면 현재의 프로젝트 경로 중심으로 파일을 복사, 빌드해서 최종적으로 안드로이드 프로젝트내 libs에 so 파일이 복사된다.

이후 이클립스를 실행하고 안드로이드 프로젝트를 빌드하면 java 코드가 컴파일되어 최종적으로 APK가 생성된다.


개발은 어떻게?

기존의 코드가 대부분 C로 짜여져 있다면, 작성된 코드를 NDK를 이용해서 라이브러리화 하면 된다. 코드는 Classes디렉토리에서 작업을 한다.

만약 Cocos2D의 라이브러리를 이용해서 자바로 작성하고자 한다면 프로젝트내에 src/org/cocos2d/lib/ 디렉토리에서 java 소스를 확인한다.


프로젝트가 생성되면 생성된 프로젝트를 원래 작업하던 곳으로 바꿔도 될까?

C/C++코드에 추가로 코드를 작성할게 아니라면, cocos2d-x용 라이브러리를 생성 후에는 다른곳으로 통째도 옮겨도 무방하다. 

C/C++ 코드가 자주 수정되고 변경이 된다면, 가급적 Cocos2D-X를 설치(?)할때도 작업할 디렉토리에 설치하는 것을 권한다.


참고 사이트

Cocos2D-X 홈페이지 (http://cocos2d-x.org)

안드로이드 개발자 페이지 (http://developer.android.com)














  1. 이 부분은 더 확장이 가능할 것으로 보인다. 별도로 Cocos2D-X for XNA 도 존재한다. [본문으로]

관련글 더보기

댓글 영역