タグ別アーカイブ: android

7 今日のエラーAndroidアプリ開発、andEngine GLES2 Anchor Center,box2d |manifest.xmlの記述ミスでintentでエラー

前回のエラー対処Androidアプリ開発、今日のエラーまとめ(1)ー(6)分、2003年9月22日〜11月7日

7 今日のエラーAndroidアプリ開発

アンドロイドアプリを作っていて、何回か同じようなプロジェクトを作成していると同じような設定をしなければならない箇所がでてきます。設定したと思っていたら、設定していなくてデバッガーに何が悪いのかが表示されないことが多々あり、そのとき、5分、10分とエラーと格闘します。すぐに分かるものならばよいのですが、エラーの対処に戸惑って、1日2日とムダにすることがあります。それを避けるためにエラー対処記録を取るようにしました。
続きを読む

海外ニュース見出し、カリフォルニア州、クリスマスの夜、結婚式に使う色について喧嘩し婚約者を花嫁が刺す|MacOSX,Android用プログラム、ゲーム用シミュレーション用API LiquidFunの公開、その他Unity、カテゴリ

海外のニュース

カリフォルニア州、クリスマスの夜、結婚式に使う色について喧嘩し婚約者を花嫁が刺す

Wedding Color Scheme Argument Leads to SC Stabbing

クリスマスの夜、カリフォルニア州南部で、結婚式に使う色について喧嘩し、婚約者を女性が刺したと発表しました。
水曜日の午後8時半頃、クリスタル・ジェームスは婚約者と結婚式についての相談で議論となり、彼が自宅に帰ろうとしたとき彼に襲いかかりました。
彼は、上半身に怪我を負いましたが、命に別状はありません。
ジェームズは、家庭内暴力等の罪により逮捕され、保釈金は1万ドルです。
続きを読む

googleplay アプリ登録手順|アンドロイドアプリ特実意商法文検索Liteアプリをアップ

googleplay アプリ登録手順

グーグルプレイにアップロードした時に間違ってしまった手順最初のアンドロイドアプリのときの記事

2013年11月29日、アンドロイドアプリ 特実意商法文検索Liteアプリをアップました。
2本目のアンドロイドアプリを登録しました。なお前回作成したアプリの限定版なので、単にいらない部分を削っただけのアプリです。
日本語しかいないのですが、全世界向けに登録しておきました。

アプリ登録手順を簡単にメモっておきます。

<googleplay アプリ登録前の準備>

キャプチャ2枚
アイコン各種用意:アイコンの自動リサイズサイト(iPhoneアイフォン、androidアンドロイド)
http://makeappicon.com/
このサイトを利用して、アンドロイドのアイコンのリサイズで使用しました。
 一つのファイル1024サイズ推奨で、複数のアイコンをリサイズしてくれます。アイフォン、アンドロイド用にリサイズしてくれます。
その後、手動で各ディレクトリにペーストしました。

APKファイルの出力(eclipse)、APKは、”Android Tools” > “Export Signed Application Package…を実行して、必要な情報を入力します。個別プロジェクトのフォルダに保存しました。

掲載する文章4000文字以内、80文字以内(プロモーションの場合は別途画像を用意しないと登録されません)

<googleplay アプリ登録>

ログインURL
play.google.com/apps/publish

アプリ名を入力
APKファイルのアップロード
各種入力

その後

すぐには公開されず、約2時間後、午後7時46分ごろに公開されました。


本ずわいかにしゃぶ 1.0kg×2セット株式会社キタウロコ荒木商店3980円、5980円

たらば蟹足 1.5kg越前かに問屋ますよね、価格4,777円 (税込) 送料込

クリスマストイレットペーパー

クリスマスツリー

(2)cocos2d for iPhoneからandEngine for androidへの移植(たぶん)過程メモ,タグ、タッチイベント

(2)cocos2d for iPhoneからandEngine for androidへの移植(たぶん)過程メモ,タグ、タッチイベント

前回の(1)cocos2d for iPhoneからandEngine for android移植過程メモはこちら

アンドエンジンよりは主に、box2dのコードを調べていますが、アンドロイドのBOX2Dに限定したサイトは少なく、FLASHだったり、C#, cocos2dだったりしました。box2dが活用された時期は数年前になるようで、その間にサイトが無くなった可能性もあります。

プログラム言語が異なるので、検索したサイトの記事が、AndroidとBox2dの参考にならないかと残念に思っていたら、Flashのコードをよくよく見ると、box2dがC++で記載されているせいか、若干の記載が異なるだけで、ほぼ似たようなコードの記載になっているようでした。他のプログラム言語で書かれているBOX2Dの記載でも、JAVAのアンドロイドにおいても参考になりました。

では、以下より、移植のための比較メモを始めます。途中cocos2dに関する比較のためのコードの記載がない箇所があります。

cocos2dでもAndEngineでもタグを設定できます。これで、スプライトの種別を判別できます。
これによって、判定処理により、あるタグは無視して、あるタグだけタップした時に何か処理を与えることができます。

Andengineチュートリアル、
AndEngine Simple Android Game Tutorial

cocos2dの時と同じ内容のチュートリアルでとても参考になります。

タグの設定

iPhone

Android
スプライトにタグを設定できます。intです。implementクラスに記載します。
Sprite sprite;
sprite.setTag(1);

final DEFAULT_TAG=1;
sprite.getTag()==DEFAULT_TAG;

getChildIndex(i).getTag()として取得できます。
getChildCount()で総数を取得し、For でチェックします。
以下は、参考のコードです。実行チェックしてません、
[c]
for(int i; i<getChildCount();i++){
if( getChildIndex(i).getTag() == DEFAULT_TAG){
//do something
}
}
[/c]

Zオーダーでスプライトの重なりについては、

cocos2dは
[self addChild:sprite z:1];

AndEngineは
Zindexにおいて
sprite.setZIndex(1);
のようにします。

タッチイベントの取得

AndEngineのタッチイベントの記載は複数の方法あるようです。
画面全体に対するイベントと、特定エリアに限定したタッチイベントがあります。
メソッドを記述するだけ、宣言をするだけでは機能しない(設定不足となる)ものもあります。
インプリメントの記述漏れについては、エクリプスがエラーを表示するので、その時に宣言を追加すれば良いと思います。

AndEngine
onAreaTouched(),IOnAreaTouchListener

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

定義
boolean onAreaTouched

登録
registerTouchArea(sprite);

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

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

box2d衝突判定ContactListenerを使用

ContactListenerはobjective-c、cocos2dにもありません。box2d固有のものです。

cocos2dのbox2dについてはまだ、cocos2d with box2dのプログラムを進めていないので明確に記載できません。
とりえず、AndEngineの衝突判定は、ContactListenerを使用します。
忘れるといけないので記載します。
宣言についての説明は省略し、実際は他のところに記載しています。
なお、contactListenerにsetTransformを記述しても、BODYは移動しません。(実はここが重要だったりします。)

そのために、registerUpdateHandlerタイマーを利用して、contactListenerにBODYが接触したかのフラグ等を入れてチェックをして、接触したら、移動させるように別途用意する必要があります。(プログラムがエラーにならないので、なぜか悩みましたが、海外の掲示板に書かれていました。)
なお、色を変更するくらいは、実行出来ました。

参考
body.setTransform does not work inside contact listener (andEngine and box2d)

[c]
private ContactListener createContactListener()
{
ContactListener contactListener = new ContactListener()
{
@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("hiyoko") && x2.getBody().getUserData().equals("another") ||
x1.getBody().getUserData().equals("another") && x2.getBody().getUserData().equals("hiyoko")
){
Log.d("contact", "contact_hiyoko");
woodRectangle.setColor(1.0f, 0.0f, 0.0f);
}

}
}

@Override
public void endContact(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("hiyoko") && x2.getBody().getUserData().equals("another")||
x1.getBody().getUserData().equals("another") && x2.getBody().getUserData().equals("hiyoko")
){
Log.d("contact_end", "end_hiyoko");

woodRectangle.setColor(0.0f, 1.0f, 0.0f);
}

}

}

@Override
public void preSolve(Contact contact, Manifold oldManifold) {
// TODO Auto-generated method stub

}

@Override
public void postSolve(Contact contact, ContactImpulse impulse) {
// TODO Auto-generated method stub

}
};
return contactListener;
}
[/c]

(6)A物体とB物体が衝突しないように設定するのは、FixtureDefでmaskBitの設定をする

以下の例は、
BOXはBOXとWALLで衝突し、CIRCLEはCIRCLEとWALLに衝突します。
BOXとCIRCLEは衝突しません。
(short)0はグループのようです。グループに分けて、衝突の分類分けができるみたいです。

なので、登録した物同士が衝突し、登録してないものは衝突しない。透けていくということです。

PhysicsCollisionFilterExample.javaより

[c]
/* The categories. */
public static final short CATEGORYBIT_WALL = 1;
public static final short CATEGORYBIT_BOX = 2;
public static final short CATEGORYBIT_CIRCLE = 4;

/* And what should collide with what. */
public static final short MASKBITS_WALL = CATEGORYBIT_WALL + CATEGORYBIT_BOX + CATEGORYBIT_CIRCLE;
public static final short MASKBITS_BOX = CATEGORYBIT_WALL + CATEGORYBIT_BOX; // Missing: CATEGORYBIT_CIRCLE
public static final short MASKBITS_CIRCLE = CATEGORYBIT_WALL + CATEGORYBIT_CIRCLE; // Missing: CATEGORYBIT_BOX

public static final FixtureDef WALL_FIXTURE_DEF = PhysicsFactory.createFixtureDef(0, 0.5f, 0.5f, false, CATEGORYBIT_WALL, MASKBITS_WALL, (short)0);
public static final FixtureDef BOX_FIXTURE_DEF = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f, false, CATEGORYBIT_BOX, MASKBITS_BOX, (short)0);
public static final FixtureDef CIRCLE_FIXTURE_DEF = PhysicsFactory.createFixtureDef(1, 0.5f, 0.5f, false, CATEGORYBIT_CIRCLE, MASKBITS_CIRCLE, (short)0);
[/c]

(7)乱数

1.Random r = new Random();
//乱数の取得
int i = r.nextInt(180); //0~180の乱数を取得する

2.int ran = (int)(Math.random()*100)+90;//0-0.9に100倍(90)して+90とする
Math.random()は0以上1未満なので、それに該当する数をかけて、10とか100にします。
この例では、0から99にして90を加算しています。

3.ミリ秒を使用
Calendar cal = Calendar.getInstance(TimeZone.getDefault());
cal.setTime(new Date());
int ms = cal.get(Calendar.MILLISECOND); // 0..999
int ran = (int)(Math.random()*100)+ms/10;//msについては個別に対応することとしてとりあえず10分の1として、深い意味はありません。

効果音、BGM

音の形式については、oggが推奨されているようですが、wav、mp3も再生可能です。
問題なく、再生できました。なお、ファイル名が違っていたり、ファイルが無いと強制的に終了します。エラーが発生してもちょっとみにはどこに問題があるかわからず、ログを追っかけてわかるので、ファイルIO関連は、ログを出力するようにするか、強制終了しないように回避策を入れたほうが良いと思います。(私は余裕が無いので、ログくらいしか出しません)

getBaseActivity()は、個別に作成したactivityです。
MainActivity.javaのonCreateEngineOptions()記載します。
EngineOptions eo=new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED,
new RatioResolutionPolicy(DEFAULT_CAMERA_WIDTH, DEFAULT_CAMERA_HEIGHT), camera);
eo.getAudioOptions().setNeedsMusic(true);
eo.getAudioOptions().setNeedsSound(true);

[c]
SoundFactory.setAssetBasePath("mfx/");
MusicFactory.setAssetBasePath("mfx/");

private Sound badSound;
private Music bgmMusic;
badSound=SoundFactory.createSoundFromAsset(getBaseActivity().getSoundManager(), getBaseActivity(), "se_bad.m4a");
bgmMusic=MusicFactory.createMusicFromAsset(getBaseActivity().getMusicManager(), getBaseActivity(), "bgm_play_short.mp3");
bgmMusic.setLooping(true);
[/c]
あとは、それぞれplay()です。

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のためのワークスペース
・他
という感じでワークスペースを構成しています。

(1)cocos2d for iPhoneからandEngine for androidへの移植(たぶん)過程メモ,box2d

(1)cocos2d for iPhoneからandEngine for androidへの移植(たぶん)過程メモ,box2d

過去の移植記事 

cocos2d for iPhone をcocos2d-xに移植する過程の記録メモまとめ、Androidクロスプラットフォーム化へ 、(1)〜(6)分

andEngineを選んだ理由

アイフォンでゲームを開発するなら、cocos2d for iPhone、cocos2d-x、unityが有名です。他にもフレームワークはあると思いますが私は知りません。
cocos2d for iPhoneはobjective-c、cocos2d-xはc++でどちらもXCODEです。unityは3Dオブジェクトモデル主体で、c#, javascriptを使用し、ビジュアル的にオブジェクトを配置します。その配置したオブジェクトに対して命令、処理を与えるわけです。unityはどことなくAdobe Flashに似ています。比較的操作しやすい環境です。

 cocos2d for iPhone、cocos2d-xに関する記事はこちら

 Unityに関する記事はこちら

 Blenderに関する記事はこちら

クロスプラットフォーム対応としてcocos2d-xかUnityで開発し、ひとつのコードでアイフォンとアンドロイド向けスマートフォンに対応することができます。
 cocos2d-xとUnityはほぼクロスプラットフォームに対応しているので、アイフォンとアンドロイド用のアプリを生成できます。
多少の調整は必要となるかもしれませんが。

 アンドロイド向けアプリ開発のフレームワークとしてandEngineがあります。他にもあるようですが、日本語のサイトをあまり見かけませんので、andEngine が主流なのかと思っています。
coronaSDK(Lua言語)というのもありました。無料から会社の規模に応じて料金を支払うようです。言語がちょっと特殊なので今回は除外です。

私の場合今回は、andEngineを使用することにしました。
 理由は、前回のアプリ開発がアンドロイドアプリだったので、このままアンドロイドアプリの開発に慣れておきたいからです。
他の理由として、クロスプラットフォームは、その開発環境がOSや再生環境(スマートフォン)のバージョンアップに即座に対応できないこと、いずれ開発会社か開発者が、クロスプラットフォーム環境の開発をやめてしまうのではないかという個人的な危惧から、純粋な開発環境で開発したほうが後々得をするのではないかと考えたからです。
 例えば、WindowsとMacの両方で動作可能としたクロスプラットフォームがかつてありましたが、結局、それぞれのOSのための設定、調整が必要で個別の開発を進めたほうが後々のデバッグ等で開発がスムーズに進み、逆にクロスプラットフォームとして開発するほうがデメリットが大きかったりしました。
 しかも、そのソフトのバージョンアップがなくなるとまた他の開発ソフトに切り替える必要があったりと、メリットが有るのは最初だけだったように思えます。それでも、最初のうち、ソフトの内容が小規模のうちは非常に有効なソフトでした。

もちろんすべての例に当てはまることはないと思います。andEngineがなくなってしまうこともありますので、他の環境も徐々に覚えていきたいと思います。

とりあえず、AndEngineを利用して、アイフォンで開発したゲームをアンドロイドに移植するとどのような違いがあるのかをメモしていきたいと思います。

アイフォンアプリとして作成したミニゲーム「ひよこレスキュー」を多少改善して、アンドロイドアプリとして開発します。
こちらでダウンロードできます。https://itunes.apple.com/jp/app/hiyokoresukyu/id578574439?mt=8(iTunesに移動します)
他のアプリについてはこちら

参考図書:AndEngineでつくるAndroid 2Dゲーム , 立花 翔 (著)
実際に公開しているアプリについて解説されています。著者についてはあまり気にせず日本を選びましたが、アイフォンアプリの開発本を書いている人でもありました。アイフォンアプリとアンドロイドアプリで100本以上も開発したそうです。
ゲーム自体が、ミニゲームでほんの数分程度しか遊べないようなゲームですが、個人でアプリ開発をするのに参考になる内容です。

AndEngineには物理演算エンジンも利用できます。物理エンジンBox2Dを使いたいときは別途ダウンロードして、インポートする必要があります。
box2dはcocosでも利用できます。私はcocos2d for iPhoneのbox2dはまだ、勉強していないので、今後cocos2d for iPhoneのbox2dを利用したアプリも作ってみたいと思います。

・開発環境
MacOSX10.8.5、Eclipse、ネクサス7(2013)、PowerBookPro(2012)、外部モニター使用

<比較内容>
・画像の表示
・BOX2Dの利用
・その他情報BOX2D、R.U.B.E 、cocos2d for iPhone with box2dチュートリアル
・スマートフォンアプリの市場について

画像の表示

cocos2d for iPhone

andEngine
画像サイズよりも大きめの領域を確保してから画像から読み込みます。(自動で領域を確保してくれません。)
どのフォルダassets/gfxにあるのかも記入する必要があります。

[c]
Scene scene;
protected static final int CAMERA_WIDTH=800;
protected static final int CAMERA_HEIGHT=480;
BitmapTextureAtlas playerTexture;
ITextureRegion playerTextureRegion;
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
playerTexture=new BitmapTextureAtlas(getTextureManager(), 64, 64);//画像サイズ
playerTextureRegion=BitmapTextureAtlasTextureRegionFactory.createFromAsset(playerTexture,
this , "player.png",0,0);
playerTexture.load();
Sprite sPlayer =new Sprite(CAMERA_WIDTH/2, CAMERA_HEIGHT/2, playerTextureRegion, this.mEngine.getVertexBufferObjectManager());
sPlayer.setRotation(45.0f);//必要に応じて
this.scene.attachChild(sPlayer);//box2dのときは、ここはコメントにし、他のところでattachchildします。
[/c]

[c]
@Override
public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
throws Exception {
// TODO Auto-generated method stub
this.scene=new Scene();
this.scene.setBackground(new Background(0, 125, 58));

//box2dの場合で通常のSpriteでは必要ありません。
physicsWorld=new PhysicsWorld(new Vector2(0, SensorManager.GRAVITY_EARTH), false);
this.scene.registerUpdateHandler(physicsWorld);

//common
pOnCreateSceneCallback.onCreateSceneFinished(sceneManager.createSplashScene());

}

[/c]
box2dでは更に物理ワールドを追加します。
[c]
PhysicsWorld physicsWorld;
FixtureDef PLAYER_FIX=PhysicsFactory.createFixtureDef(10.0f, 1.0f, 0.0f);
Body body=PhysicsFactory.createCircleBody(physicsWorld, sPlayer, BodyType.DynamicBody, PLAYER_FIX);

this.scene.attachChild(sPlayer);//
physicsWorld.registerPhysicsConnector(new PhysicsConnector(sPlayer, body, true, false));

[/c]

BOX2Dの利用

Rectangle 四角形のポリゴン表示

Rectangle 四角形のポリゴンを表示する場合、比重、弾力、摩擦抵抗の順で環境設定します。

アンドエンジンは、左上から下に向かって正座標になります。
そして、四角形の基準点も上から基準です。ポリゴンの中心点ではありません。3Dモデリングをしたりすると、だいたいオブジェクトの中心が基準になるので、BOX2Dもそうかと思ったら、違うみたいで、上の位置が基準のようです。

(注)「AndEngine GLES2 Anchor Centerというライブラリがあり、これを使用することで、cocos2dと同様に、左下原点、座標中心座標となります。なお、AndEngineをremobeして入れ替えることになります。」

そのため、
new Rectangle()の引数は
左上X、左上Y、厚さ幅(左からの幅)、高さ(上からの高さ)、VertexBufferObjectManager()
となり、
画面上の右側にポリゴンをカメラ上下に配置したいときは、
左上座標をカメラ幅(厚さを15としたので、その分を引いてます。)位置にして、上から下に向かってカメラ高さにします。
よって、CAMERA_WIDTHの400-15とY座標の0を基準にして、厚さと高さを指定しています。
なお、ポリゴンの中心が基準ではありません(だと思います。つい勘違いして、オブジェクトの中心位置がオブジェクトの基準点だと思いがちです)。

座標の基準はiOSと同じです。
cocos2dの場合は、下が原点になります。左下が原点(0,0)で、上に向かてY座標は正になります。ここは注意が必要です。
SpriteがないのでConnectは必要ありません。
画像box2d_1.png
box2d
[c]
//right wall
int CAMERA_WIDTH=400;
int CAMERA_HEIGHT=800;
FixtureDef WALL_FIX=PhysicsFactory.createFixtureDef(0.0f, 0.0f, 0.0f);//比重、弾力、摩擦抵抗の順
Rectangle rightWallRectangle=new Rectangle(CAMERA_WIDTH-15, 0, 15, CAMERA_HEIGHT, getBaseActivity().getEngine().getVertexBufferObjectManager());//15引くことで、見えない状態から見える位置に戻してます。
rightWallRectangle.setColor(new Color(0, 100, 0));
PhysicsFactory.createBoxBody(physicsWorld, rightWallRectangle, BodyType.StaticBody, WALL_FIX);
attachChild(rightWallRectangle);
[/c]

その他情報BOX2D

Box2dで使用するキャラクターやオブジェクトの設定、当たり判定、リグ、IK(インバースキネマティクス)、コネクション関係を設定するツールソフト。

R.U.B.E stands for Really Useful Box2D Editor. 約3000円のツール

Box2D mountain-bike

http://www.iforce2d.net/b2dtut/
Box2D tutorials – Introduction – iforce2d

・cocos2d for iPhone with box2d アイフォンアプリ用のbox2dのチュートリアルも参考になると思うので記載
Intro to Box2D with Cocos2D 2.X Tutorial: Bouncing Balls | Ray Wenderlich

How To Create A Breakout Game with Box2D and Cocos2D 2.X Tutorial: Part 1 | Ray Wenderlich

How To Create A Breakout Game with Box2D and Cocos2D 2.X Tutorial: Part 2 | Ray Wenderlich

スマートフォンアプリの市場について

アイフォンとアンドロイド携帯、その他の携帯電話、スマートフォンが発売されています。現在、アンドロイド携帯端末が多く、そして2番めにアイフォン端末だと思います。
主流の2つのスマートフォンに向けて、アプリを開発することが望ましいことは言うまでもありません。
 実際にadmobをアイフォンアプリとアンドロイドアプリに設定して、広告表示数をチェックしてみたところ、ほぼおなじ回数の広告が表示されていました。ダウンロード数が少ないので、他のアプリ全般に共通しているといえることではないですが、この結果をみると、できるだけ、多くのプラットフォームに対応したほうが、広告表示回数が多くなるということがわかりました。

android版弁理士短答試験過去問題記録ノート無料アプリをグーグルプレイにアップ完了|グーグルプレイにアップロードした時に間違ってしまった手順

android版弁理士短答試験過去問題記録ノート無料アプリをグーグルプレイにアップ

無料ダウンロード、特許法、実用新案法、意匠法、商標法の条文を搭載

android版弁理士短答試験過去問題記録ノート無料アプリ

先月アイフォン版の弁理士短答試験過去問題記録ノートを開発し、今回アンドロイド版を開発、アップしました。
アイフォン版についてはこちらiOS7 iPhoneアプリ(4作目)申請からリリース状況のまとめ

機能についてはほぼ同じですが、アイフォンとアンドロイドのOSと開発環境の違いから少し画面構成、操作方法など変わりました。

現在、後発のアンドロイド版には法文集に簡単な検索機能が付加されています。

<アイフォンアプリとアンドロイドアプリ開発の感想>
 アイフォンアプリをいままでにゲームを含めて4本、今回はじめてアンドロイドアプリを1本開発しました。
 アイフォンアプリとアンドロイドアプリの開発を振り返ると、アイフォンのほうが作りやすいという印象を受けました。
 理由として
1.画面サイズが一定の範囲で固定されている
2.XCODE、開発環境が便利、ストーリーボードが使いやすい
3.開発者にすべてのコードを無理に記載させない配慮がある(個人的)

でした。
アンドロイドアプリで面倒なのが、画面構成、レイアウトでした。
XML、いわゆるブラウザに表示するように画面にオブジェクトを配置していきますが、思ったように配置できずにイライラします。
 これは、後に、あらゆる画面サイズに対応するための処置なのだなと思わされるのですが、たくさんのモニタサイズの全てに配慮するなど無理であり、きちんと仕様にまとめるべきではないのかアンドロイド担当者に言いたいくらいでした。

グーグルプレイの登録に25ドル必要です。

・説明
弁理士短答試験の過去問題(現在は平成25年度の問題を使用)を学習する無料の勉強アプリです。60問の問題から1問を選択して学習します。
正解回数を履歴として記録しますので、勉強が不十分な問題を把握することができます。
さらに、特許法、実用新案法、意匠法、商標法の条文データを搭載。(著作権、不正競争防止法他の条文については今後のバージョンアップで対応予定)
android_web_1

android_web_2

android_web_3

登録の注意点

・グーグルプレイにアップロードした時に間違ってしまった手順、操作

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

eclipseからandroidアプリへのデジタル署名手順が必要らしいです
android_key
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

android版弁理士短答試験過去問題記録ノート無料アプリ

(1)Androidアプリ開発、今日のエラー,AndroidManifest.xml、AndroidActivity.xmlの設定忘れ、Admob広告を表示させる,error、 エミュレータ 動かない,エミュレータを起動してもアプリが実行されない|(1)アイフォンアプリをアンドロイドアプリに移植、コード比較、変換方法

(1)Androidアプリ開発、今日のエラー,AndroidManifest.xml、AndroidActivity.xmlの設定忘れ、Admob広告を表示させる,error、 エミュレータ 動かない,エミュレータを起動してもアプリが実行されない

  1. アイフォンアプリの場合はこちら
  2. Androidアプリ開発、今日のエラーまとめ(1)ー(6)分、2003年9月22日〜11月7日(1)から(6)まとめのリンクはこちら
  3. (7) 今日のエラーAndroidアプリ開発、andEngine GLES2 Anchor Center,box2d |manifest.xmlの記述ミスでintentでエラーはこちら

アイフォンアプリをアンドロイドアプリに移植中です。
 アイフォンの開発言語はobjective-cで、アンドロイドはJAVA言語になります。JAVAをベースにしてアンドロイドアプリをつくるとしてもアンドロイドアプリのための固有の開発方法がありそうです。

(1)ワーニング AndroidManifest.xml

Description Resource Path Location Type
Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details. AndroidManifest.xml

android:targetSdkVersion=”18″
しました。

(2)android エミュレータ 動かない,エミュレータを起動してもアプリが実行されないときは

EclipseからAndroidエミュレータを起動してもアプリが実行されない
この記事を参考にしてようやくハローワールドが表示されました。

(3)intent 画面遷移で移動できない、対処はAndroidActivity.xmlの設定忘れ

AndroidActivity.xmlに

(4)adView = new AdView(this, AdSize.BANNER, “ID-XXX”);でエラー

Could not find class ‘com.google.ads.AdView’, referenced from method com.AAA.bentannote2.MainActivity.onCreate

Admobのライブラリの挿入方法が教科書のヘルプであるグーグルの説明と異なり、変わったようです。

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

AdMobの使い方
Could not find class ‘com.google.ads.AdView’

(5)配列が初期化されていない

宣言だけして、初期化を忘れていました。
 myArray=new ArrayList();
宣言をしたら、どこにでもいいのでまず、初期化を書くように習慣づけたいと思います。

(1)アイフォンアプリをアンドロイドアプリに移植、コード比較、変換方法

x-code,android アイフォンアプリを作ったのでアンドロイドアプリを作ってみよう

アンドロイドアプリなんて作ることはないと思ってました。
アンドロイドアプリを作成するのに、今度はJAVAを覚えなくてはならないという手間が嫌でした。それに、アンドロイドアプリを作っても果たしてダウンロードをする人がいるのか、作っても無駄な作業にナルト思っていました。
しかし、自分の作ったアイフォンアプリが比較的よくできたと思ってしまったので、アンドロイドアプリを作ることにしました。それに、自分が使うアプリなら、誰もダウンロードしてくれなくても、自分が使えていればそれで十分なのかもしれません。

まずは、作り方から勉強します。
内容と構成はアイフォンアプリと同じなので必要な機能を覚えて行きます。

まずは簡単なアプリからはじめます。

アイフォンアプリのx-codeと比較しながらメモをとっていきます。
いずれ、アンドロイドアプリの作り方をすぐに忘れてしまいます。忘れても良いように書いておきます。

<アイフォンアプリをアンドロイドに移植開発>

アイフォンアプリは、スマートボードを利用してViewを作成すると便利です。アンドロイドは、1アプリで画面展開を一覧表示する機能はないので、1View1画面毎に表示して、作業をします。
レイアウトXMLがView画面に相当し、JAVAクラスからでもオブジェクトを作成できます。

 説明文中で、アイフォンアプリ、iOS, XCODE, objective-Cと書いた場合は、アイフォンアプリについての説明を記載したものです。アンドロイドアプリ、eclipse, JAVAと書いた場合は、アンドロイドアプリについての説明を記載したものです。
 開発環境、開発言語と細かく区別せず大きな枠で説明しています。解釈上意味不明なところがあると思います。

1.ログ出力

アイフォンアプリ,XCODEのログ出力
NSLog(@”DB is OK”);
DB is OK
と出力されます。

アンドロイド, JAVAのログ出力

画像

Log.d(“DB”, “OK”);
最初の引数はタグで、ログキャットのタグの列に表示されます。そして、第2引数はテキストの列に表示されます。
DB OK
として、列に別れて出力されます。こちらの方が見やすいかもしれません。

2.ボタンアクションコードの記載方法

XCODEの場合は、IBActionのメソッドに記載します。

JAVAの場合は、いくつかあります。
また、以下のコードは、少し、コードが長くなります。他にも、レイアウトxmlのボタンに記載してメソッドのように整理できる記載もあります。今回は書籍でよく見かけるコードにしました。
[c]
Button button;
button=(Button)findViewById(R.id.button1);
button.setOnClickListener(new View.ClickListerner(){
public void onClick(View v){
//here
}
});
[/c]
[c]
Button backButton;
backButton=(Button)findViewById(R.id.backButton);
backButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

}
});
[/c]
と、メソッドの引数の中に、メソッドがあるように記載します。

3.データベース SQLite3,CoreData

アイフォンでは、PCで事前に作成したSQLite3のファイルをそのまま利用して読み込みます。
書き込みは、CoreDataが利用できます。なお、CoreDataのエンティティ(テーブルみたいなもの)が増えた場合は、インストールしたアプリを削除しないとアプリが起動しない場合があります。

アンドロイド
データベースSQLite3のファイルを参照のみの利用でも、assetフォルダに保管し、使用するときにSQLite3ファイル自体を一旦コピーしてから利用します。
そして、assetフォルダに配置するファイルは1MB以下にする必要があるとのこと。大きすぎるファイルは要注意です。分割するか圧縮する必要があるようです。

参考サイト
[Android Programming] sqliteのDBファイルをPCでつくってandroidで使う – ipreachableの日記

既存のDBをAndroidで使えるようにする方法 – hentekoのdev日記

SQLiteからの結果をListViewに表示する

既存のsqliteファイルをAndroidに組み込む : ナカノ製作所開発備忘録

Y.A.M の 雑記帳: Android あらかじめ作成した SQLite database をアプリに取り込む

4.オブジェクト、ボタン、ラベル、テキストエディット

 XCODEでは、ボタン等をViewに配置し、ヘッダーファイルにドラッグし紐付けします。プログラムで使用しないオブジェクトは紐付けの必要はありません。
 
 JAVAでは、レイアウトのXMLで配置し、クラスに宣言、命令を記載します。
なお、異なるクラスでも同じレイアウトXMLを利用できます。

5.レイアウトVIewの他クラスの利用

アイフォン
オブジェクトを自由に好きなように配置できます。

アンドロイド
レイアウトのXMLに別のレイアウトXMLのオブジェクトを利用できる
レイアウトの自由度は低い。まるでウェブブラウザーで表示するhtmlファイルです。
ただし、様々な画像サイズのタブレットに対応できる柔軟性を持っていますが、デザイン性が低くなるかもしれません。

6.クラスをまたがって変数を共有する

XCODEでは、デリゲートを使用します。

JAVAでは、Applicationを継承したクラスを作ります。
Activityにまたがってグローバルに変数などのオブジェクトを共有するには

7.画像、音声ファイル

アイフォン
プロジェクトのどの場所でもよいですが、フォルダをプロジェクトに作ってわかりやすく配置します。
例えば、pic/back, number, buttonなど。

アンドロイド
resフォルダに保存し、音声ファイルはres/rawに保存します。

8.エミュレータ

アイフォン
アイフォン、iPadのエミュレータが起動します。
レティナ対応のiPadは大きすぎるので、縮小して表示します。特に難しい設定はありません。

アンドロイド
どのターゲットのエミュレータを起動するのか設定し実行します。
もし、エミュレータが実行しても、アプリが起動しない場合は、、、、、を選択します。
ここが一番わかりにくかったです。

9.文字列の取得

アンドロイド
strings.xmlの文字列を取得したいとき
getString(R.string.year) yearはH25年度として登録

10 レイアウトに配置されたTextViewに、文字配列を与えてListViewに表示する

アイフォン
テーブルビューを使用します。

アンドロイド
(1)は、レイアウトxmllistview_row.xmlに配置されたtextView1、textView2に、マップのquestion, answerの文字列をそれぞれ与えます。
そして、このコードにはありませんが、listview.xmlのListViewに表示させるものです。
(2)は、マップなしの単純なArrayListを、listview_row.xmlに配置されたtextView1に配置させるものです。

[c]
(1)SimpleAdapter simpleAdapter=new SimpleAdapter(this, globals.contactArrayList, R.layout.listview_row,new String[]{"question, answer"}, new int[]{R.id.textView1,R.id.textView2});

(2)adapterQuestionString=new ArrayAdapter<String>(this, R.layout.listview_row,R.id.listRowTextView,globals.arrayPartStrings);

[/c]

メタルギア ソリッド V グラウンド・ゼロズ 通常版(初回生産限定特典:本篇『MGSV:TPP』で使用可能なマザーベース スタッフDLC同梱&Amazon.co.jp限定特典:本篇『MGSV:TPP』で使用可能な特殊ダンボール箱DLC付き)プラットフォーム: PlayStation 4、発売予定日は2014年3月20日

Titan Fallタイタンフォール [オンラインコード] [ダウンロード]発売予定日時は2014年3月13日、ガンダムやバルキリー、装甲騎兵ボトムズみたいに人型ロボットに搭乗して敵を倒すゲーム、コックピットからのカメラ映像がリアリティがあり、まさに未来のロボットを操縦する感覚で遊べるゲーム

グラビアアイドル、清水みさと/恋して、みさと先生!


【GoPro HERO3+】LCDタッチ バックパック(リミテッドエディション)「ALCDB-303」在庫あり
「LCDタッチ バックパック」は、GoProカメラ用のLCDタッチスクリーンです。
カメラ背面に装着し、フレーミングや再生など、LCDスクリーンの利便性を提供します。
脱着式なので、不要な時は取り外してGoProカメラをできるだけ軽く小さくコンパクトにすることができます。

C2X (3)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ 、CCArrayにint型を挿入する方法、これがcocos2d-xに見当たらないので、vectorにする

(3)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ 、CCArrayにint型を挿入する方法、これがcocos2d-xに見当たらないので、vectorにする

CCArrayにint型を挿入する方法がわかりました。
CCIntegerを使うみたいです。以下に記載しました。

(1)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ

(2)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモCCTextuer2DからCCSpriteを使う

・アンカーポイント

cocos2d for iPhone
background.anchorPoint=ccp(0,0);

ココス2d−x
background->setAnchorPoint(ccp(0,0));

・ウィンドウサイズの取得

cocos2d for iPhone
CGSize size=[[CCDirector sharedDirector]winSize];

cocos2d-x
CCSize size=CCDirector::sharedDirector()->getWinSize();

size.width
size.height

・CCLabelTTF

CCStringはNSStringの変わりのように利用できません。
char型になります。

cocos2d for iPhone

limitTime=[CCLabelTTF labelWithString:limitTimeString
fontName:@”Helvetica”
fontSize:32 ];
limitTime.position =ccp(140,300);
limitTime.color =(ccc3(200, 0, 0));
[limitTime setString:limitTimeString];
[self addChild:limitTime z:60 ];


cocos2d-x
CCStringはそのままでは使えません。char型にする必要があります。
アンドロイドへのクロスプラットフォームのことがあるので、余計な道に入らない王道で記載します。

const char* climitTimeString;//
CCLabelTTF *limiTime =CCLabelTTF::create(climitTimeString, “Helvetica”, 32);
or
limiTime=new CCLabelTTF();
limiTime->initWithString(climitTimeString, “Helvetica”, 32);
limiTime->autorelease() ;
this->addChild(limiTime,30);
limiTime->setPosition(ccp(size.width/2,size.height-30));
limiTime->setColor(ccc3(200, 0, 0));
limiTime->setString(climitTimeString);

init側ならばリリースができる。

・int から文字列変換

cocos2d for iPhone

int i;
i=10;
NSString* str;
str = [ NSString stringWithFormat : @”%02d”, i];


cocos2d-x

int i;
i=10;
const char* climitTimeString=CCString::createWithFormat(“%d”,i)->getCString();

・スプライトの幅と高さのサイズを取得

cocos2d for iPhone

CCSprite *restSprite=[CCSprite spriteWithFile:@”base.png”];
restSprite.contentSize.height;//これを代入したりますがここでは省略してます。


cocos2d-x

CCSprite * restSprite=new CCSprite();
restSprite->initWithFile(“sample.png”);
restSPrite->autorelease;

restSprite->getContentSize().height;//これを代入したりますがここでは省略してます。

・ランダム

たぶんどっちもあり
int tmpRandom=arc4random_uniform(5);

・CCArrayにint型を挿入する方法、これがcocos2d-xに見当たらないので、vectorにする

CCArray型のarrayにintを追加します。
NSNumberオブジェクト使ってINTを配列に入れます。

[array addObject:[NSNumber numberWithInt:(30)]];


cocos2d-x
オブジェクトであれば、CCArrayに追加、挿入できますが、int型なのでできません。
cocos2d-xに見当たらない、探すのが面倒なので、vectorにする

vector v_ar_speed;
vector::iterator begin,end;

v_ar_speed.push_back( 10 );//追加
v_ar_speed[0];//として呼び出し可能

コンテナ【vector】

その後、CCIntegerを使えば良いみたいです。
[cocos2d-x入門 クロスプラットフォームによるゲーム開発 クロスプラットフォームによるゲーム開発]に書いてありました。
それを参考にしました。

int i=10;
(CCArrayの生成は省略します。)
INT型の追加
array->addobject(CCInteger::create(i));

取り出し
int n=2;
int f=( (CCInteger*)array->objectAtInteger(n) )->getValue();

でもかなり面倒なので、INT型はC++なのでvectorベクターを使った方が簡単に扱えます。
(さらに追記)
なお、vectorは実行速度がlistよりも遅いという記事を読みましたので、今後はlistを使った方が良いかもしれません。
vectorを使ったのは、使った事があったからで、特別の理由はありません。

(1)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ、まず第一歩

(1)cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ、Androidクロスプラットフォーム化へ、まず第一歩

AndEngineによるアンドロイドゲームアプリ「ひよこレスキュー」を作成しました。こちらからダウンロードできます。
ダウンロードはこちらからです。無料です。広告収入のためにADMOBを入れています。(2014年1月11日追記)

楽してスマートフォンの二つのプラットフォームに対応したアプリをつくるには?

 スマートフォンの市場は、アイフォンとアンドロイドの2つの勢力でほぼ占めています。アイフォンで作ったアプリをAndroidへも展開することで、ごく単純に考えて2倍のダウンロード数が可能になる計算になります(実際は、そこまでいかないでしょうけど)。
 アイフォンアプリは、MacOSX上で動作するXCODEでobjective-cを使用します。アンドロイド用アプリは、JAVAを使用します。つまり、objective-cとJAVAなわけですから、かたやオブジェクト指向のC言語(C++ではないのにオブジェクト指向)とオブジェクト指向の本流の言語として、開発環境が異なると言うことになります。ゲームシナリオやアルゴリズム、画像、音楽データ、データベースなどは同じものが使えるとして、コーディングについては、ほぼ別のものを作る必要があります。
 
 コードを共通化したい
そこで、クロスプラットフォームとして、cocos2d-xを使うことにします。

cocos2d for iPhoneとcocos2d-xとは
「cocos2d for iPhone」 とはアイフォンアプリでゲームを作るためのフレームワークで、xcodeでobjective-cを使います。

「cocos2d-x」はアイフォンアプリでゲームを作るためのフレームワークで、xcodeでc++を使います

cocos2d-xのメリットは、Androidアプリを作るためのクロスプラットホームのための効率化です。アイフォン用として動作するアプリ(コード)がAndroidアプリと動作することができます。

つまり、アイフォンアプリを作ってAndroidへ移植する時の効率が非常に優れていることです。「cocos2d for iPhone」で作った場合、Androidへそのままコードをコピペしても動きません。ゼロからJAVA用に書き換える必要があります。こうかくと「cocos2d for iPhone」の利便性が低いように思えますが、「cocos2d for iPhone」はobjective-cでコードを記載するので、MacOSX,iOSアプリを作っている人が利用しやすく、objective-c固有のコードやライブラリを使用することができます。ただ、ゲームの世界でobjective-c固有のコードやライブラリを使用するのは多いことではありません。
クロスプラットフォームとして考えるとどうしても「cocos2d-x」が優位と考えられます。
ゲームメーカーも「cocos2d-x」を利用しているそうです。

cocos2d for iPhoneとcocos2d-xのどちらもcocos2dと冠しているのでコマンドの内容や指定手順はほとんど同じです。objective-cかc++というほんの少し文法が違う点を除けば、同じ感覚でプログラムを作っていくことができます。

<cocos2d for iPhone をcocos2d-xに移植する過程の記録メモ>

まず、以前作成したひよこレスキューというアイフォンアプリcocos2d for iPhone をcocos2d-xに移植しAndroidアプリとして公開しようと思います。

iTunesはこちら

画面

今回が初めての試みですので、途中で挫折するか、別のアプリを作成する方向に変わるかもしれません。そのときはごめんなさい。

<第一回>
キャラクタクラスを作成し、画像を表示する

クラスの作成
CCSpriteクラスを承継するcHiyokoクラスを作成
スプライトを設定し、クラス生成

 C++の文法を忘れてます。ほんとに覚えることがあって大変です。
やっとobjective-cのコーディングになれてきたのに。

(正式な方法や正式名称を使わずに、説明しているところがあります。
ご注意ください。)

objective-Cでは、クラスを
voidをかっこで挟んで、マイナスをつけます。

AA.m
-(void)function{//メソッドのあとに、かっこがない

}
となります。

C++ではクラス名があって::をつけてメソッドを書きます。
AA.mm
クラス名::function(){//メソッドの後にかっこ必要

}

まず、C++なので当然ながらプロパティがなくて、マクロを利用します。

CC_SYNTHESIZE(cocos2d::CCSprite, _spriteHiyoko, spriteHiyoko);
こんな感じ。このとき、型の宣言とプロパティ、シンセサイズまでまとめて設定されます。
クラスメソッドは、
ID型がないので、boolかstaticにしてポインタにします。
ここらへんがややこしくなります。
+(CCScene *) scene
は、static cocos2d::CCScene* scene();みたいになります。

インスタンスメソッドは、マイナスのついたメソッドのことですが、boolになります。

<感想>
objective-cからC++への移植は思ったよりも難航しそうです。
まず、何を何から変えてよいのかわからない。
単純にそのまま、表示させる程度のものでも。

2014年1月11日追記
現在のところ、cocos2dXについての開発を中止しました。
アンドロイドアプリではダウンロードされそうにないみたいなので、無理して、クロスプラットフォームで開発する必要がなくなりました。
今後はアイフォン向けアプリとUnityの開発にしようと思います。