2. 안드로이드 개발 환경 만들기


cocos2d-x 3.0 으로 만든 게임을 안드로이드용으로 빌드하기 위해서 필요한 개발 환경을 만들어두겠습니다.

필요한 패키지는 JDK, 안드로이드 SDK 와 이클립스를 같이 가지고 있는 ADT bundle, NDK, 그리고, ANT 입니다.



1. JDK 다운로드 후 설치

http://www.oracle.com/technetwork/java/javase/downloads/index.html


2. ADT bundle 다운로드 후 압축해제

http://developer.android.com/sdk/index.html


3. NDK 다운로드 후 압축해제

http://developer.android.com/tools/sdk/ndk/index.html



2, 3 번 압축 해제 후 ADT bundle 과 NDK 를 같은 디렉토리 안에다 넣어둡시다. 

(반드시 이렇게 해야하는 것은 아닙니다만, 관련있는것들 한군데 몰아넣으면 디렉토리 구조도 깔끔하고 관리가 편하다고 생각됩니다.)

저는 홈디렉토리 아래에 ADT 라는 디렉토리를 만들고 그 안에 모두 집어넣었습니다.

4.  ANT 설치

ANT 는 자바 코드를 빌드할 때 사용하는 툴이라고 하네요. 안드로이드용으로 빌드할 때 cocos 콘솔 프로그램이 필요로 하나봅니다.


ANT 의 본부는 아래 주소입니다.


http://ant.apache.org


우리가 필요한 것은 좌측 메뉴에서 Download > Binary Distribution 에 있습니다. 바로 가는 주소는 아래와 같습니다.


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


다운로드 페이지에서 아래 보이는 .zip 파일을 받습니다.



Finder 에서 다운로드 폴더로 가 봅시다. apache-ant-1.9.3-bin.zip 파일이 있을겁니다. (버전은 차이가 있을 수도 있습니다.)


압축을 풀면 apache-ant-1.9.3 이라는 디렉토리가 생깁니다.


압축을 풀어서 적당한 곳에 넣어둡시다. ( 제가 선택한 적당한 곳은 /usr/share/java/ 아래입니다. ㅎ)


터미널에서 다운로드 디렉토리로 이동한 후, apache-ant-1.9.3 디렉토리를 /usr/share/java 디렉토리 아래로 옮깁니다.


$ cd ~/Downloads

$ sudo mv apache-ant-1.9.3 /usr/share/java


ANT 의 위치는 /usr/share/java/apache-ant-1.9.3 이 되겠네요.

ant 실행파일의 위치는 /usr/share/java/apache-ant-1.9.3/bin 입니다.


5. .bash_profile 수정

앞선 포스트에서 COCOS_CONSOLE_ROOT 관련 경로를 설정해 주었었는데요, 이제 아래처럼 수정을 하겠습니다.


export COCOS_CONSOLE_ROOT=/Users/codecodi/cocos2d-x-3.0/tools/cocos2d-console/bin

export NDK_ROOT=/Users/codecodi/ADT/android-ndk-r9d

export ANDROID_SDK_ROOT=/Users/codecodi/ADT/sdk

export ANT_ROOT=/usr/share/java/apache-ant-1.9.3/bin


export PATH=$PATH:$COCOS_CONSOLE_ROOT:$NDK_ROOT:$ANDROID_SDK_ROOT:$ANT_ROOT


codecodi 는 본인의 아이디로 변경해주셔야겠지요.



이렇게 해서, 안드로이드를 위한 준비도 마쳤습니다.





Posted by 똑똑한 영장류

1. cocos2d-x 3.0 시작하기


개발환경에 관한 몇 마디


cocos2d-x 3.0 을 이용한 게임의 개발은 윈도우 환경에서도 가능하고, 맥 환경에서도 가능합니다.

맥 환경에서 Xcode 를 이용할 수도 있고, 윈도우 환경에서 비주얼 스튜디오를 이용할 수도 있습니다.

네, 개발은 어디에서나 가능합니다.


하지만, 애플 앱스토어나 구글 플레이 스토어에 올릴 최종 결과물을 만들어야 하는 시점이 되면 상황은 달라집니다.


아이폰용, 즉, 애플 앱스토어에 올릴 최종 결과물을 빌드하기 위해서는 무조건! 맥 환경이 필요하기 때문입니다. 

윈도우 환경에서는 애플 앱스토어에 올릴 결과물을 만들어 내는 것은 불가능합니다.


안드로이드용, 즉, 구글 플레이 스토어에 올릴 최종 결과물은 윈도우 환경에서도 만들어낼 수 있습니다.


이런 이유로, 앱스토어와 플레이 스토어, 두 곳 모두에 게임을 올리고 싶다면 당연히 맥을 이용할 수 밖에 없습니다.


본인의 필요에 맞게 작업 환경을 갖추고 진행하면 되겠습니다.



저는 맥 환경에서 개발을 합니다.

따라서, 앞으로 cocos2d-x 3.0 에 관련한 내용들은 저의 작업환경, 즉 맥 환경을 기준으로 작성되어 집니다. 


위에서 이야기했다시피, 작업환경에 따라 최종 결과물의 빌드 방법이라던가 약간의 차이는 있을 수 있습니다만, cocos2d-x 3.0 에 국한된 내용은 그다지 차이가 없을 것입니다.



현재 OS 는 OS X 10.9.2 Mavericks 이고, 




개발 도구는 Xcode 5.2.1 입니다.



cocos2d-x 3.0 다운로드하고 설치하기


cocos2d-x 의 본부 사이트의 다운로드 페이지에서 쉽게 다운로드할 수 있습니다.


http://www.cocos2d-x.org/download




[Download v3.0] 을 클릭하면 cocos2d-x-3.0.zip 을 받을 수 있습니다.



Finder 에서 '다운로드' 디렉토리로 가서 확인할 수 있습니다. 

cocos2d-x-3.0.zip 을 홈디렉토리로 옮기고 압축을 풀어줍니다.


cocos2d-x 를 이용해서 만들 프로젝트들을 모아놓은 디렉토리를 하나 만들어 둡시다.

저는 홈디렉토리 아래에 COCOS2DX 라고 만들었습니다.


아래와 같은 상태가 되는군요.





codecodi 는 맥에서 제 아이디입니다.

앞으로 글들에서 나타나게 될 codecodi 는 본인의 계정으로 대치해서 생각하면 됩니다.


여기까지가 설치라면 설치라고 할 수 있겠네요.ㅎ



그리고, 약간의 환경설정을 하겠습니다.



압축 해제한 cocos2d-x-3.0 디렉토리 안에 setup.py 가 있습니다. python 으로 작성된 스크립트 파일입니다.

이 파일은 .bash_profile 파일에 몇가지 환경 변수들을 기록해 주는 기능을 합니다. 


첫번째는 cocos 라는 콘솔 프로그램을 어디에서나 사용할 수 있게 관련 경로를 설정해줘서 터미널을 열때마다 그 경로가 살아있도록 하는 겁니다.

두번째는 안드로이드용으로 빌드할 때 필요한 NDK, ANDROID_SDK, ANT 의 경로를 설정해 줍니다.


setup.py 의 목적을 알고 있으니, 머 그냥 직접 작성하도록 하겠습니다.

(사실, 이전 버전을 설치하고 개발에 이용하면서 이미 .bash_profile 에 필요한 설정들이 되어 있는 상황입니다. 그래서 백업해두고 새로 텅빈 .bash_profile 을 만들어주고 setup.py 를 실행시켰더니, 파일 수정이 제대로 안 되더군요. 원인 분석을 하기보다는 그냥 직접 작성하는 방법을 권합니다.)


직접 작성하자!


직접 작성한다면....

안드로이드 관련 환경변수들을 일단 지금은 관심 밖으로 두고...(나중에 필요할 때 다시 살펴보겠습니다.)

cocos 콘솔 프로그램의 경로를 지정하는 것만 하면 되겠습니다.


.bash_profile 을 수정합니다. 


 .bash_profile 에 추가된 내용은 아래와 같습니다.


export COCOS_CONSOLE_ROOT=/Users/codecodi/cocos2d-x-3.0/tools/cocos2d-console/bin

export PATH=$PATH:$COCOS_CONSOLE_ROOT


codecodi 자리에는 본인의 아이디가 들어가야겠지요.


이렇게 설정된 값들은 다음에 새로 터미널을 열면 적용이 됩니다. 현재 쉘에 적용이 되도록 하려면 아래처럼 입력합니다.


$ source ./.bash_profile



이제 cocos console 을 어디에서나 이용할 수 있습니다.


cocos console 이 뭐길래...

cocos 라는 이름의 콘솔 프로그램이 rc0 부터든가 도입이 되었습니다. 터미널에서 프로젝트를 생성시킬 수 있고, 빌드해서 실행도 시킬 수 있습니다. 기본적으로 프로젝트를 생성할 때 사용하게 됩니다.


터미널에서 cocos 만 입력해보면 아래와 같은 설명이 나옵니다.


Ryuui-MacBook:~ codecodi$ cocos


/Users/codecodi/cocos2d-x-3.0/tools/cocos2d-console/bin/cocos.py 0.2 - cocos console: A command line tool for cocos2d


Available commands:

compile      Compiles the current project to binary

new          Creates a new project

run          Compiles & deploy project and then runs it on the target

jscompile    minifies and/or compiles js files

deploy       Deploy a project to the target


Example:

/Users/codecodi/cocos2d-x-3.0/tools/cocos2d-console/bin/cocos.py new --help

/Users/codecodi/cocos2d-x-3.0/tools/cocos2d-console/bin/cocos.py run --help

Ryuui-MacBook:~ codecodi$


다음에는 cocos 를 이용해서 프로젝트를 만들어 보겠습니다.



그외 .bash_profile 에 설정되어 있어야하는 경로값으로는 안드로이드용 앱을 빌드할 때 필요한 아래의 내용들입니다.

나중에 안드로이드용으로 빌드하게 될 시점에서 자세히 살펴보겠습니다.


NDK_ROOT

ANDROID_SDK_ROOT

ANT_ROOT




















 


















Posted by 똑똑한 영장류

기다리고 기다리던, cocos2d-x 3.0 정식 버전!!


alpha, beta, rc 딱지를 떼고 마침내 나왔습니다!!!


현재 카테고리별로 나누어져서 올라와 있는 cocos2d-x 관련 포스트들을 3.0 정식 버전에 맞춰 수정을 하고 한 곳으로 모을 계획입니다.


도움이 될라나요...?







Posted by 똑똑한 영장류

IntroLayer 에서 PlayLayer 로 전환될 때 아래의 순서대로 함수가 호출된다.

적절한 함수내에서 제거 또는 초기화를 해 주면 되겠다.


cocos2d: IntroLayer::onEnter

cocos2d: IntroLayer::onEnterTransitionDidFinish


초기 메뉴 화면에서 플래이 버튼 누르면...


cocos2d: PlayLayer::createScene()

cocos2d: PlayLayer::init()

cocos2d: IntroLayer::onExitTransitionDidStart

cocos2d: PlayLayer::onEnter

cocos2d: IntroLayer::onExit

cocos2d: PlayLayer::onEnterTransitionDidFinish


... 게임 플래이 후 캐릭터 죽거나 해서 종료되어 다음 씬으로 넘어갈 때...


cocos2d: PlayLayer::onExitTransitionDidStart

cocos2d: PlayLayer::onExit







Posted by 똑똑한 영장류


그저께 rc0 가 나왔는데, 프로젝트 만드는 것부터 다르다.

이제 콘솔 프로그램을 이용해서 프로젝트 만들고 빌드하고 실행도 가능하다고 한다.


cocos2d-x 엔진 자체의 변화는 대부분 버그픽스일거라 예상한다.



그럼, 코드 작성법은 크게 달라진 것이 없을거고.


beta2 엔진으로 만들었던 게임에 어떻게 적용하면 좋을까???



결론은...


rc0 에서 프로젝트를 새로 만들고 이전 작업한 소스들을 가져오는 것이 좋다.


괜히 이상하게 포팅할라고 하면 더 어렵다..



블로그 글 제목에 있는 beta2 는 어찌할꼬.......






Posted by 똑똑한 영장류

프로젝트를 만들었을 때 살펴 봤듯이 coco2d-x 는 멀티 플랫폼을 지원합니다. 게임을 만들면 아마도 iOS 용과 Android 용 두 가지로 배포하기를 원할겁니다. 두 가지로 배포가 되더라도 소스 코드는 공유를 하고 각각에 맞게 빌드를 하게 됩니다.

저는 우선 iOS 용을 위해 Xcode로 작업을 완성한 후, Android 용을 위해 다시 고민을 할 생각입니다. 그래서 특별한 말이 없으면 모두 Xcode에서 iOS 를 위한 내용들을 포스팅할 것입니다.

그럼, Xcode로 프로젝트를 열었을 때 보이는 코드들을 살짝 살펴보겠습니다.



위와 같이 소스 코드들이 있습니다.

먼저 ios 폴더아래에 icons 라는 폴더가 있습니다. 그 안에는 앱의 설정 파일인 Info.plist 와 해상도에 따른 앱 아이콘들이 위치하고 있습니다.

실제 이 이미지 파일들이 위치하고 있는 폴더는 프로젝트 디렉토리 아래에 proj.ios_mac/ios/ 입니다.

나중에 앱 아이콘 등 디자인을 하고 나서 덮어쓰기를 해 주게 됩니다.

이미지 파일 외에 소스 파일 중, 우리가 거의 손을 대지 않아도 되는 파일들이 ios 폴더 아래에 있는 다음 파일들입니다.

main.m
Prefix.pch
AppController.h
AppController.mm
RootViewController.h
RootViewController.mm

1. main.m

Objective-C로 작성되어 있으며, 모든 앱의 시작지점입니다. 내부를 살펴보면, AppController 를 호출하는 부분이 보입니다.

2. AppController.h, AppController.mm

Objective-C 와 C++ 로 작성되어 있습니다. application, 즉 앱의 인스턴스를 만들고 앱의 화면, 즉 window와 그 위의 view 를 위한 view controller 를 마련하고 앱이 시작될 경우, 종료될 경우, 백그라운드로 들어갈 경우 등등 각 이벤트에 필요한 함수들이 구현되어있습니다.

살펴보면, Classes 폴더 안에 있는 AppDelegate.h 를 include 하고 있으며,  앞서 말한 각각의 이벤트가 발생할 때  cocos2d-x도 뭔가를 수행할 수 있도록 코드가 작성되어있습니다. cocos2d-x 와의 연결 지점이 바로 이곳입니다.

하나 예를 보면…

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 함수 내에 아래의 코드가 있는 것을 볼 수 있습니다.

cocos2d::Application::getInstance()->run();

앱이 론치가 끝나면, cocos2d::Application이 실행을 시작한다는 것을 알 수 있습니다.

3. RootViewController.h, RootViewController.mm

Objective-C와 C++로 작성되어 있으며, AppController 에서 앱의 인스턴스를 만들 때 필요한 View Controller 를 위한 파일들입니다.

4. Prefix.pch

Foundation 과 UIKit을 위한 Precompiled header 파일입니다.

여기까지는 거의 손을 댈 필요가 없는 부분이며, main에서 AppController 로 넘어오면서 coco2d-x가 뛰어 놀 수 있는 View를 마련하고 있다고 생각하면 될거 같습니다.

 

Classes 폴더 안의 파일들

1. AppDelegate.h, AppDelegate.cpp

cocos2d-x  Application 을 위한 파일입니다. 여기서부터가 cocos2d-x의 영역입니다. 위에서 이야기한 AppController 에서 cocos2d::Application::getInstance()->run(); 이 호출되고 나면 이제 이 클래스의 인스턴스가 모두 관할해서 돌아가게 됩니다.

2. HelloWorldScene.h, HelloWorldScene.cpp

cocos2d-x 의 요소인 Scene 과 Layer 가 구현되어 있습니다. 데모에서 봤던 화면이 이 파일에서 구현되어 있습니다.

AppDelegate와 HelloWorldScene 은 cocos2d-x 코드니까 다음에 더 자세히 살펴보겠습니다.

 

여기까지 cocos2d-x 로 실행이 넘어가기 전까지 iOS 앱의 기본 코드와 cocos2d-x 의 시작부분까지 간략히 살펴봤습니다.





Posted by 똑똑한 영장류

실제로 코딩을 시작하기 전에 만들고자 하는 게임에 따른 프로젝트의 기본 설정을 하겠습니다.

아래 화면과 같이 왼쪽 Project Navigator 에서 프로젝트 이름을 선택하고 오른쪽에 ‘General’을 선택합니다.

Identity 부분을 보겠습니다.

- Bundle Identifier

앱스토어에 등록되는 모든 앱들을 구분하기 위한 ID입니다. 주로 도메인의 형태로 작성을 합니다. cocos2d-x 프로젝트를 생성할 때, com.appspop.MyGame 이라고 packageName을 입력했었는데요. 아마도 그 packageName 이 Bundle Identifier 로 입력이 되어있어야할 것 같습니다만, 버그인지 그 값이 들어가 있지 않습니다. 다시 수정을 해 줘야겠습니다.

- Version

말그대로 앱의 버전입니다.  시작이니까 1.0 을 입력합니다.

- Build

특별히 관리가 필요하다면 앱을 빌드할 때마다 다른 값을 설정하는 것이 가능합니다.

- Team

개발자 계정을 연결하는 부분입니다. Unknown name 이라고 선택되어져 있는데, 클릭해서 개발자 계정을 선택해 줍니다.

Deployment Info 부분을 보겠습니다.

- Deployment Target

지원할 iOS 버전을 선택하는 부분입니다. 본인의 의도에 맞게 설정해주면 됩니다. 현재 90%에 가까운 비율로 iOS 7 을 사용하고 있으므로 특별히 고려할 문제가 없다면… 저는 iOS 7 을 선택하겠습니다.

- Device

iPhone 용이냐, iPad 용이냐, 아니면 둘 다 지원하는 Universal 이냐를 선택하는 부분입니다. 저는 iPhone 용 게임을 만들 것이라 iPhone 을 선택하겠습니다.

- Main Interface

게임은 스토리보드를 사용하지 않기 때문에 cocos2d-x 와는 무관하니 그냥 둡니다.

- Device Orientation

화면을 가로로 사용할 것인지, 세로로 사용할 것인지를 선택하는 부분입니다. 손쉽게 체크 선택만 하면 변경이 가능합니다.

- Status Bar Style

화면 상단에 나타나는 상태바를 어떻게 표시할 것인가를 선택하는 부분입니다. Default 로 두고, 아래에 “Hide during application launch” 를 체크해서 Status bar 가 보이지 않게 설정할 수 있습니다.

이상 필요에 따라 본인에게 맞게 설정을 하면 됩니다.










Posted by 똑똑한 영장류





체크만 잘 해주면 된다.



Posted by 똑똑한 영장류

첫 레티나 작품, 아이폰 4의 경우 해상도가 640x960 이다.


허나, cocos2d-x 를 이용해서 작업할 경우, 윈도우 사이즈를 320x480 으로 설정하고 작업을 할 수 있다.

포인트와 픽셀...어쩌구 하는 이야기들이 있다.

640x480은 픽셀이고 320x480은 포인트다.


그러나, 레티나에서의 깔끔한 화면을 위해서 포인트가 아니라 픽셀에 맞춰서 포인트의 경우보다 더 큰, 가로세로 두배가 되는 크기의 이미지를 사용해야한다.


설명이 어설프지만, 이건 기본적인 해상도 문제의 이야기니까 넘어가고...


tiled 를 이용해서 타일맵을 만들 때는 어떻게 해야할까?


결론은 타일맵의 크기도 아이폰 4 풀화면의 경우, 640x960 으로 해야한다는 것이다.


320x480으로 하면 어떻게 될까?


Map size 가 320x480 이 되도록 설정을 하고, 

타일셋을 불러와서 그렸다.



그랬더니, 아래와 같이 나왔다.


제대로 풀화면이 되려면 아래처럼 해야한다는 거다.

타일맵을 한 화면 가득한 크기로만 해야한다는 법은 없고..


결론은...

map size 는 레티나를 위한 이미지 사이즈를 다루는 것과 같다...는 것이다.


당연한 거??









Posted by 똑똑한 영장류

cocos2d-x 3.0 이 pre alpha0 였는데, 9월 24일날 pre 를 떼고 alpha0 가 등장했습니다.. 소개가 좀 늦었군요.


다운을 받아서 기존 설치된 pre alpha0를 업그레이드를 해야겠습니다.


방법을 살펴볼까요?

pre 버전의 경우, Xcode 에 템플릿 추가 등을 하지 않고, 임의의 디렉토리에 압축을 풀면 바로 사용이 가능했었죠.

아래 링크를 참고하세요.

pre 버전 설치방법



이번에도 마찬가지입니다.

혹시 모르니 이럴 때마다, 기존에 작업하던 프로젝트들은 잘 백업을 해둬야겠습니다.


pre 버전일때, 저는 /Volumes/Data 2/cocos2d-x/projects/ 아래에 프로젝트를 생성시켜서 작업을 해 왔습니다.

작업하던 프로젝트를 열어서 프로젝트에 추가되어 있는 cocos2d-x 관련 파일들의 경로를 확인해봅시다.


이전 작업하던 프로젝트에서 포함시키고 있는 파일의 경로는 위 그림의 빨간 사각형 안을 보다시피, 그냥 압축 해제했던 그 경로 그대로입니다.


만약, 새로운 버전을 다른 곳에 압축을 풀고, 이전 버전으로 작업했던 프로젝트를 그냥 복사해서 projects 디렉토리로 옮겨서 컴파일을 한다면 프로젝트가 참조하고 있는 cocos2d-x 관련 파일들은 어떻게 될까요? 프로젝트는 옮겼는데, 이전 pre alpha0의 파일들을 계속 참조하면 안 되겠죠?


그래서, 잠깐 확인해 봤습니다.

cocos2d-x-3.0alpha0.zip 을 압축해제하고, 그 아래에 이전 버전에서 작업하던 projects 디렉토리를 가져온 후, 작업하던 프로젝트를  열어 봤습니다. 그리고, 위 그림처럼 파일경로를 살펴봤습니다.




오호라~

cocos2d-x-2.0alpha0 의 파일을 가리키는 군요. 첨부터 상대경로로 파일들을 포함시키고 있었나봅니다.

쓸데없는 걱정을 한 것 같아 머쓱합니다. ㅎ



그렇다면, 적당한 곳에 alpha0 를 압축해제하고, 그 안에 이전 projects 디렉토리를 갖다놓으면 된다는 거군요.


혹시 모르니, 

예전 디렉토리도 그냥 두고, cocos2d-x-3.0alpha0 디렉토리에 projects 디렉토리를 옮긴 후 작업하렵니다. 물론 백업은 꼭 해야겠죠.


나중에 별문제 없이 잘 되면, 이전 디렉토리는 삭제하면 되겠습니다.


설치는 큰 문제가 없네요.


release note 를 참고해서 바뀐 내용들을 살펴본 후, 작업하던 소스에도 적용하면 되겠습니다.




그러나! 직접 위 작업을 해 보신 분들은 뭔가 에러가 발견될 겁니다. ㅋ


그건 alpha0 버전이 되면서 이전 버전에 있던 녀석이 사라지고 새로운 녀석이 나타났기 때문입니다.

다음 포스트에서는 새로 등장한 녀석에 대해서 살펴보겠습니다. 






Posted by 똑똑한 영장류

 

오늘도 좀 헤맸다.ㅋ

 

AppDelegate.cpp 에서

director->setAnimationInterval(1.0/60);

 

요거는 흔히 이야기하는 FPS 설정하는 거고.. 1초에 60번 화면 갱신하도록 노력하겠다..

 

게임 돌아가는 layer 에서

 

this->schedule(schedule_selector(PlayLayer::gameLogic), 1/30);

 

요거는 1/30초마다 한번 gameLogic 함수를 실행하겠다..라는 거쥐...


이값을 0으로 두면 fps 속도대로 실행을 하게되는데..

"진짜??"하면서 gameLogic(float dt) 에서 dt를 찍어봤더니,,,

msec 수준에서..


0.016xxxxxx

0.033xxxxx


이게 값이 왔다갔다하네.


"아놔.."


근데, 기기에서 돌리니까..거의 같은 값이 잘 찍히네.ㅡ.ㅡ


앞으로 테스트는 기기로...






Posted by 똑똑한 영장류


보통 레이어 초기화부분에서 작성하니까..init()내에 적당한 곳에 아래처럼 작성..


this->schedule(schedule_selector(PlayLayer::gameLogic), 0.5);


실행될 함수는 아래처럼 작성.

void PlayLayer::gameLogic(float dt)

{




}





추가:


원래 cocos2d 가 가지고 있는 update() 함수를 이용하기


그 함수는 바로!


virtual void update(float dt)

헤더파일에 정의해주고, 소스파일에 작성하고...


레이어 init()에서

thid->scheduleUpdate();





Posted by 똑똑한 영장류


1.

Default.png

Default@2x.png

Default-568h@2x.png


2.1.5에서는 Resources 디렉토리 안에 위 파일들을 넣었는데, 3.0에서는 미리 준비된 내용을 보니, proj-ios 에다가 넣어준다.

멀티플랫폼을 생각하면, 제대로 구분을 해 놓는걸로 보여 괜찮네.


2. 

IntroScene, IntroLayer, MenuScene, MenuLayer, PlayScene, PlayLayer 클래스 생성하고, 기본 코딩하기.


3.0 으로 바뀌면서 달라진 점들이 많아서 소스 수정이 불가피하다.

intro..., Menu..., Play... 의 소스들을 수정하기 위해 필요한 내용들을 정리해보면...


CCDeprecated.h 를 참고하면 좋을 것 같다.

CC 접두사는 모두 제거되었다.

CCSizeMake() 는 Size()로 바뀌었다. 

sharedDirector() 는 getInstance() 로 변경되었다. 대부분의 shared... 는 getInstance()로 바뀌었다.

CCFileUtils 는 CC 가 떨어져나가 FileUtils 로 바뀌었다.


CCLog() -> log()

ccp() -> Point

ccc3() -> Color3B()


개발자들이 어떤 식으로 네이밍을 변경했는지 한번 생각해보고 에러뜨는 부분에서 수정할 수 있으면 좋겠다.


그냥 이거 참고!

수정된 소스는 아래와 같다.

3.

dataSingleton 클래스 생성하고, 기본 코딩하기

이건 2.1.4에 사용하던 그대로 사용하면 되겠다.


.h

#ifndef __app009__dataSingleton__

#define __app009__dataSingleton__


class dataSingleton{

private:

    

    dataSingleton();

    ~dataSingleton();

public :

    static dataSingleton* getInstance();

    static void releaseInstance();

    

    int x;

    

};


static dataSingleton* sharedData;


#endif /* defined(__app009__dataSingleton__) */


.cpp

#include "dataSingleton.h"


dataSingletondataSingleton::getInstance(){

    

    if (!sharedData)

    {

        sharedData = new dataSingleton;

    }

    

    return sharedData;

}


void dataSingleton::releaseInstance(){

    if(sharedData !=NULLdelete sharedData;

}


dataSingleton::dataSingleton(){

    sharedData = NULL;

    x = -1;

}


dataSingleton::~dataSingleton(){

    delete sharedData;

    sharedData = NULL;

}


써먹을때는 해당 Layer.h 에 #include "dataSingleton.h" 해주고, cpp 에서 아래처럼 불러서 이용.

sharedData = dataSingleton::getInstance();



4. 

Resources 아래에 fonts 디렉토리는 있으니까 그냥 쓰고, SD, HD 디렉토리 만들어 두는 것은 2.1.5 버전에서와 같다.

이 3개 디렉토리를 프로젝트에 폴더 타입으로 추가를 해준다.



5.

appDelegate.cpp 수정하기

USING_NS_CC;


typedef struct tagResource

{

    Size size;

    char directory[100];

}Resource;


static Resource iPhone3Resource  =  { Size(480, 320), "SD" };

static Resource iPhone4Resource =  { Size(960, 640), "HD"   };

static Resource iPhone5Resource  =  { Size(1136, 640), "HD" };


static cocos2d::Size designResolutionSize = cocos2d::Size(480, 320);



bool AppDelegate::applicationDidFinishLaunching() {

    // initialize director

    Director* director = Director::getInstance();

    EGLView* eglView = EGLView::getInstance();


    director->setOpenGLView(eglView);

    // Set the design resolution

    eglView->setDesignResolutionSize(designResolutionSize.width, designResolutionSize.height, ResolutionPolicy::FIXED_WIDTH);

    

    Size frameSize = eglView->getFrameSize();

    Size frameSize2 = director->getWinSize();

    

    if (frameSize.height == iPhone5Resource.size.height)

    {

        FileUtils::getInstance()->addSearchPath(iPhone5Resource.directory);

        director->setContentScaleFactor(iPhone5Resource.size.width/designResolutionSize.width);

    }

    else if (frameSize.height == iPhone4Resource.size.height)

    {

        FileUtils::getInstance()->addSearchPath(iPhone4Resource.directory);

        director->setContentScaleFactor(iPhone4Resource.size.height/designResolutionSize.height);

    }

    else if (frameSize.height == iPhone3Resource.size.height)

    {

        FileUtils::getInstance()->addSearchPath(iPhone3Resource.directory);

        director->setContentScaleFactor(iPhone3Resource.size.height/designResolutionSize.height);

    }

    

    Point p = director->getVisibleOrigin();

    Size s = director->getVisibleSize();

    

    // turn on display FPS

    director->setDisplayStats(true);

    

    // set FPS. the default value is 1.0/60 if you don't call this

    director->setAnimationInterval(1.0 / 60);

    

    // create a scene. it's an autorelease object

    Scene *scene = IntroScene::create();


    // run

    director->runWithScene(scene);

    

    

    

    return true;

}


USING_NS_CC 가 되어있으니까, cocos2d::는 안 써도 무방..







Posted by 똑똑한 영장류