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

_4.今日のエラーandroid,google play 関連のエラー

前回のエラー解消、メモ
グローバル変数設定エラー、This version of the rendering library is more recent than your version of ADT plug-in、バックグラウンドからの復帰でエラー、Cursor cursor=db.rawQuery(selectQuery, null)

android,google play 関連のエラー| apkをアップロードしようとしたら「zipalign が実行されていない APK をアップロードしました。APK で zipalign を実行し、もう一度アップロードする必要があります。」というエラー

eclipseからandroidアプリへのデジタル署名手順が必要らしい
1.”Android Tools” > “Export Signed Application Package…
を実行して、必要な情報を入力
2.指示に従って入力して、新しいAPKファイルを作成して、
3.アップロードして、
4.公開設定にすれば終わりです。
AM8:06

ただ、どのURLかいまわからない。
次のようになるそうです。

https://play.google.com/store/apps/details?id=com.example.application
https://play.google.com/store/apps/details?id=com.ドメイン.アプリ名

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

(1)box2dを使用してデバッグしようとするとエミュレータが “Emulator without GPU support detected”と表示してしまう

エミュレータでGPUを設定してもダメ。
PJ名は box2dtext
エミュレータは、API16 android 4.1.2ではエラー

実機でもエラーと思ったら、2回ダメで、その後、OK。一体何だったんだ。
でもエミュレータではエラーのまま。
API16 android 4.1.2ではエラー
>APIのバージョンを上げて API 18 android 4.3でOK

(2)プロジェクト名、パッケイージ名の変更したいときは

フォルダ名をfinderでコピーしておいてEclipseにインポートして、

マニフェストファイルを開いて変更したいcom.xxx.newnameにして
左側のsrcのところを右クリックしてRefactor > Renameにして、Upadate referencesとRename subpackagesをチェックします。

詳しくは以下のリンクを参考。
Eclipseのリファクタリング機能を活用する « Tech Booster
Androidのプロジェクト名・パッケージ名の変更 [Android] – phonybearの日記

(3)admobのライブラリの追加忘れ

アドモブの広告を追加しようとしたら、なかなかエラーが消えない。
よくよく考えたら、ADMOBのライブラリを追加していませんでした。

libs/GoogleAdMobAdsSdk-XXX.jarとなるように、GoogleAdMobAdsSdk-XXX.jarをコピーします。
私は手動で、コピペしました。
もし、すでに、教科書通りにGoogleAdMobAdsSdk-XXX.jarを挿入していたら、挿入済みを一旦削除してください。
すでに登録されているGoogleAdMobAdsSdk-XXX.jarがあるとエラーになります。

そして、activityj_main.xmlに
xmlns:ads=”http://schemas.android.com/apk/lib/com.google.ads”
を忘れずに。

(4)onAreaTouched(),IOnAreaTouchListenerが動かない

設定してもなぜか動かない、そして、アクションを起こしたいスプライトを正しくタップしているのに、ログにも出ない。
原因:該当のスプライトを登録していませんでした。
対応:registerTouchArea(sprite);として登録しました。

設定
setOnAreaTouchListener(MainScene.this);//dont forget

定義
boolean onAreaTouched

登録
registerTouchArea(sprite);

onAreaTouchedを使って、タップされたスプライトなどにアクションを与えたいとき、
設定して、定義してもどのスライトに対して、登録しないとコンパイルエラーや実行時のエラーがなくても正常に動作しません。
タッチ後のアクションを与えるのかがわからないからです。

これはonSceneTouchEvent(Scene, TouchEvent)と異なります。
onSceneTouchEventは、
設定
setOnSceneTouchListener(MainScene.this);
して、定義を書けば動きます。
この点が異なります。

(5)box2d衝突判定ContactListener が正常に動かない 

ContactListenerの記載自体は問題ありません。

問題だったのは、他のところで、衝突した際に、どのBODYかを判別するために
if (x2.getBody().getUserData().equals(“player”)として
bodyの登録情報を取得する際に、設定されていない場合に強制エラーとなるようです。
値が設定されていなければ、FALSEとなるのかと思いましたが、強制エラーでした。

そこで、
if (x1.getBody().getUserData()!=null && x1.getBody().getUserData().equals(“player”) )
として、nullチェックを入れるようです。
これで、強制的なエラーはなくなりました。

また、x1,x2のどちらに該当のBODYが入るかはわからないので、両方判定を入れた変えてOR
判定を入れます。最初は、どちらか一方にBODYーAにX1が入っていれば、残りの方にBODY-BにX2が入って相互に判定してくれると思っていましたが、そうではなくて、BODY-AにX2、BODY-BにX1という場合は、判定できないようでした。
つまり、どちらに入るかはきちんと判定できるようにしなくてはいけないようです。
結果として以下のようになりました。
woodRectangleは、Rectangleで接触したら赤色に変化するようにして、衝突判定を視覚的にわかるようにしたものです。

@Override
	        public void beginContact(Contact contact)
	        {
	            final Fixture x1 = contact.getFixtureA();
	            final Fixture x2 = contact.getFixtureB();
	            if (x1.getBody().getUserData()!=null && x2.getBody().getUserData()!=null ){
	            	if ( x1.getBody().getUserData().equals("hi") && x2.getBody().getUserData().equals("another") ||
	            			x1.getBody().getUserData().equals("another") && x2.getBody().getUserData().equals("hi") 
	            			){
		        		Log.d("contact", "contact_hi");
		        		woodRectangle.setColor(1.0f, 0.0f, 0.0f);
		        	}
	            	
	        	}
}

関連記事

「スポンサーリンク」


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