(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にあるのかも記入する必要があります。

    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します。
@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());
		
	}

box2dでは更に物理ワールドを追加します。

		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));
	

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

//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);

その他情報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アンドロイド携帯アプリ タグ: , , , パーマリンク