6 今日のエラー、 andEngineをGLES2 Anchor Centerにして、box2dをインポートして、実行するとエラー

6 今日のエラー、 andEngineをGLES2 Anchor Centerにして、box2dをインポートして、実行するとエラー

今日のエラー前回、google play 関連のエラー,Box2d のアプリがエミュレータでエラー、APIのバージョンを上げる|admobのライブラリの追加忘れ|onAreaTouched(),IOnAreaTouchListenerが動かない|box2d衝突判定ContactListener が正常に動かない|プロジェクト名、パッケイージ名の変更したいときは

(1)andEngineをGLES2 Anchor Centerにして、box2dをインポートして、実行するとエラー

andengineで作成したプロジェクトをインポートし、GLES2 Anchor Centerのandengineに切り替えようとしました。
つまり、andengineのライブラリのプロジェクトをインポートし、このライブラリを削除して、代わりにGLES2 Anchor Centerのandengineを選択し、box2dを追加しました。
するとbox2dにandengineがくっついてしまって、機能上2つのandengineが読み込まれた形になります。
この状態で実行するとエラーになりました。

Unable to execute dex: Multiple dex files define Lorg/andengine/AndEngine;
com.android.dx.util.DexException: Multiple dex files define Lorg/andengine/AndEngine;

どうやら、GLES2 Anchor Center.jarとbox2dをインポートするとandEngine.jarも読みこ込まれてしまって、android Anchor Center.jarとandroid.jarでほぼ同じものを見ている状態になりました。
実は、box2dをインポートするとandEngine.jar自動で読み込まれるので、box2dを手動のコピペでlibにペーストしてみました。

するとエラーは消えました。困ったときは、手動がよさそうです。
次に、box2dに問題がないかを確認します。

>結果として、anchor centerに対応してAndEngineとBox2dをそれぞれダウンロードして、この2つを利用することになりました。

(2)activety_main.xml正常にレイアウトが表示されない(未解決)

java.lang.NullPointerException
という警告が表示される。ただし、プログラムは正常に表示されます。
なお、ADMOBは正常に表示されます。

対応:よくわかりません。
うだうだ考えて先に進まないよりは、とりあえず、ノーマルなandEngineのみのひな形を用いいて再度プロジェクトを作成することにします。そして、Admob等の部分を追加して、エミュレータでテスト用の画面が表示できるところまでを確認してみます。

その後、box2dとGLES2 Anchor Centerのandengineに切り替えていきたいと思います。

つまり、
andengineでSpriteとADMOBの確認後
から
box2dとGLES2 Anchor Centerのandengineに切り替え
ということになります。

1.andengineでSpriteとADMOBの確認

書籍を参考にしてひな形をしたプロジェクトPJをインポートして、各種設定をする
ADMOBをコピペ
実行確認OK

2.andengineのライブラリを一旦リムーブして、GLES2 Anchor Centerのandengineを追加(座標系の変更)、結論はこのままでは失敗

GLES2 Anchor Centerのandengineの追加はプロパティから行った
実行後、スプライト画像が表示されるが、画像の中心が左下に移動している。これは、andengineのサンプルで、(0,0)のフル画面として表示させるためのものなので、本来であれば、画面いっぱいに画像が表示されるはず。
それが、左下に移動して4分の1しか表示されていない。

つまり、ライブラリを変えたことで、左下原点で、画像中心になったということか?
そうです。左下原点であり、画像中心座標に変わりました。
これで、coco2dと同じ座標系になりました。
ここで、ちょっとまた、こんがらがってきました。今まで、andengineは、左上原点、画像も左上基準でした。また、box2dも時計回りでポリゴンを作成していました。
今回のGLES2 Anchor Centerのandengineにより、cocos2dと同じようになります。

ちなみに、アンドエンジンのサンプルは標準のアンドエンジンを用いて作成されているので、左上原点が基準です。
ここらへんがちょっとややこしくなってきます。

andengine:左上原点、画像左上基準、下がY軸正(android,iOSと同じ)
andengine GLES2 Anchor Center:左下原点、画像中心基準、上がY軸正(cocos2dと同じ)

(3)(2)の続き、GLES2 Anchor Centerのandengineにbox2dのライブラリをインポートする方法

box2dのプロジェクトは、標準のAndEngineを利用しているので、そのままインポートをすると、標準のAndEngineを取り込んでしまいます。
そこで、box2dにGLES2 Anchor Centerのandengineを変更してから、プロジェクトに入れます。
このとき、box2dのインポートをしたプロジェクトはエラーが表示されますがこのままにしておきます。
もとのAndEngineに戻せばエラーは消えますが、今度は現在作成中のPJが、andEngineとGLES2 Anchor Centerのandengineの2つのライブラリになってしまい、エラーとなります。

(3.2) (3)の更に続き、The type org.andengine.entity.shape.IAreaShape cannot be resolved.

結論は、
ワークスペースで、GLES2 Anchor Centerのandengineと標準のandengineを分けることにしました。
これでやれば、ごちゃごちゃしなくなりそうです。すでに、ごちゃごちゃしてます。
ワークスペースを別に作ることで、いままでのプロジェクトのライブラリが重複することがなくなるそうです。

andengineのbox2dを一旦、ワークスペースから削除してから
新しくワークスペースを作成し、
GLES2 Anchor Centerのandengineと anchourcenterのbox2dをインポートします。

ただし、ワークスペースの切り替えが、エクリプスの再起動になるので、ウィンドウの切り替えのように瞬間的にはできません。こういう部分は不便です。

現在のワークスペースの構成

・andengine, 通常のアンドロイドアプリ作成のためのワークスペース
・GLES2 Anchor Centerのandengineとanchourcenterのbox2dのためのワークスペース
・他
という感じでワークスペースを構成しています。

関連記事

「スポンサーリンク」


ツイートツイート
カテゴリー: Androidアンドロイド携帯アプリ タグ: パーマリンク