2013年1月31日木曜日

cocos2dxのBox2Dプロジェクト

cocos2d-xのBox2Dプロジェクトを
Android用にビルドするときにはまったメモ。

以下、太線部分を追加します。

・HelloWorldScene.hを書き換える
#include "Box2D/Box2D.h"

・Android.mkを書き換える
15行目付近
LOCAL_WHOLE_STATIC_LIBRARIES := cocos2dx_static cocosdenshion_static cocos_extension_static box2d_static

19行目付近
$(call import-module,CocosDenshion/android) \
$(call import-module,cocos2dx) \
$(call import-module,extensions) \
$(call import-module,external/Box2D)


以上です!

cocos2d-x Eclipseで編集&実行

 XCode環境でcppファイルを編集して、Androidで動作確認する時には
build_native.shを叩いてビルドして実行。
・・のような手法が主流?のようですが
Eclipseでcppファイルを編集&ビルド&実行する方法も調べてみました。

 http://kayosystem.blogspot.jp/2012/11/macandroidcocos2d-x_14.html
こちらを参考にしました。

EclipseでC/C++環境を作るところ等々は割愛します。
自分がハマったところだけメモ。


・NDK_ROOTが見つからない場合
CDTのBuild Consoleに
「NDK_ROOTがないよ」みたいなことでビルドが出来ない場合、
proj.android/build_native.shに
NDK_ROOTを宣言すると良さそうです。

私は、.bash_profileにNDK_ROOTを設定していましたが
(・・設定しているはずですが(自信無し))
上記のようなエラーでビルドが通りませんでした。

ついでに、environment.plistも設定してみたのですが
それでもうまく行きませんでした・・。
設定の仕方が悪かっただけでしょうか。謎。

build_native.shの32行目付近に
(最初にNDK_ROOTという変数が出てくる前に)
NDK_ROOT="ndkのパス"
を追加したところ、ビルドが通るようになりました。


・icon.pngでエラー
無事にビルドが通り、いざRunしようとすると
プロジェクトにエラーがあるぞと言われました。
drawable-hdpi/icon.pngに×マークが出ます。
なぜ・・。

最初は、アイコンサイズが80x80になっているから??
と思い、Resources/Icon-72.pngを72x72にリサイズしてみましたが
(というか名前に72とついてるのに何故80なのか)
エラーは相変わらず。

何故! と思い、エラーが出ている状態で続けて
Run As - Android Application を押してみた所
今度はエラーが消え、実行することができました・・。

今の所、2回に1回、実行できる感じです。
不便・・。

どこにもこのような情報が無いと思われるので
私の所だけで起きているのかもしれません。
解決できるといいな・・。

それ以外は、無事にEclipseでcppを編集&実行できました。


2013年1月30日水曜日

cocos2d-xをAndroidでも動かす

目標:cocos2dxのプロジェクトがAndroidでも動くようにする。

動作確認した環境
Eclipse:Indigo
XCode:4.3.2
AndroidNDK:r8d
Cocos2d-x:cocos2d-2.0-x-2.0.4 
ADT:21.0.0.


・環境構築…省略
http://mdlab.jp/project/framework/01.html
こちらを参考にしました。
AndroidNDKのパスを通すところまでやっておく。
…そこまで色々あった気もしますが、思い出したら追記します。


・Android用のcocos2dxプロジェクトを作成する
create-android-project.shを実行する。
targetIDは7とかにしました。お好みで。
プロジェクト名は、XCodeで作成するプロジェクトと同一になるように意識。

出来上がったプロジェクト名のフォルダを、一旦退避。
(この後XCodeで同じ階層に、同じ名前のフォルダを作成することになるため)
フォルダ名をリネームで良いでしょう。(プロジェクト名_androidとか)


・XCodeでcocos2dxプロジェクトを作成する
ProductNameとAndroid用のプロジェクト名が同じになるように作成。
作成先のディレクトリはcocos2dxの直下にしました。
(どこでもよいと思います)

これで、Android用とXCode用のプロジェクトが揃いました。


・XCodeの方にAndroidのプロジェクトをマージ
 XCodeで作成したプロジェクト内の以下の場所に、
 Androidで作成したプロジェクトに入っているproj.androidをまるっとコピーします。
例)プロジェクト名がSample01の場合
Sample01/Sample01/Classes
Sample01/Sample01/...
Sample01/Sample01/proj.android
こんな感じの構成になるように。

・build_native.shを編集
テキストエディタなどで、proj.android/build_native.shを編集します。
40行目付近
COCOS2DX_ROOT="$DIR/../../../"
(Android用プロジェクトと比べて、cocos2dxまでの階層が1つ深くなったので)

私はプロジェクトをcocos2dx直下に作ったので
上記のように「/..」を1つ増やす感じでしたが
任意の場所に作られている場合は、
ここは絶対パスで指定する必要がありますね。


・build_native.shを実行
実行します。
たくさんのファイルがコンパイルされていくはずです。

そういえば、先ほど作成したAndroid用のプロジェクトフォルダはもう使用しません。
proj.androidフォルダは、XCode用のプロジェクトの方へ統合してしまいましたので。
リネームしていたフォルダは、削除しました。

・XCodeで実行してみる
問題なく実行できることを確認します。

・Eclipseで実行してみる
プロジェクトをインポートします。
インポート後は、エラーが発生するかもしれません。
私の場合、libcocos2dxの参照先がおかしいため、エラーとなりました。
プロジェクトのプロパティを開き、Android-Libraryで
cocos2dxライブラリへの参照先を修正します。

(追記)
Android-Libraryでcocos2dxのライブラリを参照する格好にしていましたが、
cocos2d-2.0-x-2.0.4/cocos2dx/platform/android/java/src
の中身を、
Android用プロジェクト/proj.android/src
の中にコピーする方が良さそうです。
(理由…Androidのバックキーを制御したい時、
Cocos2dxGLSurfaceViewを編集する必要がありそうだから…)
 
これでEclipse上から、Android端末で実行できるはずです。



以上です。