【Androidアプリ開発】オープンソースゲームエンジン「AndEngine」のひな型(基幹部分)を作る


前回(オープンソースゲームエンジン「AndEngine」を導入してみる)の続きです。
今回は実際にAndEngineを導入したアプリのひな形を作る方法を紹介してみます。


参考書籍

AndEngineでつくるAndroid 2Dゲーム (SMART GAME DEVELOPER)
AndEngineでつくるAndroid 2Dゲーム (SMART GAME DEVELOPER)

前回に引き続き、今回の参照書籍もこちら。
サンプルゲームが3つもあるので良い感じに参考になります。おすすめ。

前回まで


・前回
オープンソースゲームエンジン「AndEngine」を導入してみる

ライブラリを設定していつも通りのプロジェクトを作成するところまでやりました。
前回の「AndengieTest」プロジェクトを改造してひな形アプリを作ります。

AndroidManifest.xmlを編集する


AndroidManifestファイルを編集して全体の設定を変更します。

・AndroidManifest.xml
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="13" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
        <activity
            android:name="com.oukasoft.andenginetest.MainActivity"
            android:label="@string/app_name"
            android:configChanges="keyboardHidden|orientation" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>



03行目、targetSdkVersionを13にする
09行目、テーマを「NoTitleBar」に変更
13行目、アクティビティのハンドリングの設定を変更、設定された変更以外ではアクティビティの再起動をしないようにする

レイアウトファイル(activity_main.xml)編集する


次はレイアウトを修正します。
デフォルトではハロワの文字が表示するだけのTextViewが置かれていますが、これを削除。
AndEngine用のRenderSurfaceViewを画面いっぱいに表示されるように追加します。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center_horizontal"
    tools:context=".MainActivity" >

    <org.andengine.opengl.view.RenderSurfaceView
        android:id="@+id/renderview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</RelativeLayout>



AndEngineで作られる画面はこのRenderSurfaceViewの中に描画されます。


1つの画面に対応するSceneクラスを作成する


通常のアプリでは一つの画面に対して一つのActivityが対応し、
複数の画面を作る時は複数のActivityを作成するという作りになっていますが、
AndEngineでは基本的にActivityは一つです。

AndEngineでは一つの画面に対応する「Scene(シーン)」という仕組みがあります。

画面には常に一つの「Scene(シーン)」が表示されていて、
それを複数入れ替えることで画面の遷移を行います。

cocos2dでもCCSceneクラスというのがありましたが、それと同じですね(^ω^)

説明より実際作っていた方がわかりやすいですね、
とりあえずSceneクラスを一つ作ってみましょう。

クラスの新規作成から、Sceneクラスを継承した派生クラス「MainScene」を作成します。

【Androidアプリ開発】オープンソースゲームエンジン「AndEngine」のひな型(基幹部分)を作る:Sceneクラスを継承した派生クラスを作成する


何も書かないのも寂しいので、
コンストラクタでログを出力する処理だけ書いておきます

・MainScene.java
import org.andengine.entity.scene.Scene;
import android.util.Log;

public class MainScene extends Scene {
 
	// コンストラクタ
    public MainScene() {
    	Log.d("AndEngine", "MainScene 作成");
    }
}



これで何もしないScene(シーン)が一つできました。

MainActivityからAndEngineの初期化を行い最初のSceneを読み込む


MainActivityを編集します。

ここで行うことは以下の4つです。
  • AndEngineの設定
  • 最初に起動するScene(シーン)を設定
  • Activityで利用するレイアウトIDを設定
  • Activity利用するViewを設定
  • Sceneで利用するリソースを返す

まずは基底クラスをActivityからSimpleLayoutGameActivityに変更、
(いくつかレイアウトの種類がありますが、今回はこれにします)
既存の処理は全部消してしまいます。
実装が強制されている5つのメソッドを追加します。

  • onCreateEngineOptions
  • onCreateScene
  • getLayoutID
  • getRenderSurfaceViewID
  • onCreateResources

名前を見るとピンと来る方も居ると思いますが、これらが上記5つの機能に対応するメソッドです。

・MainActivity

public class MainActivity extends SimpleLayoutGameActivity  {

	@Override
	public EngineOptions onCreateEngineOptions() {
        // AndEngine設定クラスを作成
        EngineOptions eo = new EngineOptions(
                // タイトルバーを非表示にする
                true, 
                // 縦向きの画面(横向きの場合は LANDSCAPE_FIXED )
                ScreenOrientation.PORTRAIT_FIXED,  
                // 480x800の解像度の縦横比を保ったまま拡大
                new RatioResolutionPolicy(480, 800),
                // 描画範囲を480,800に設定してCameraクラスのインスタンスを渡す
                new Camera(0, 0, 480, 800) );
         
        return eo;
	}

	@Override
	protected void onCreateResources() {
	}

	@Override
	protected Scene onCreateScene() {
        // MainSceneをインスタンス化し、エンジンにセット.
        MainScene mainScene = new MainScene();
        return mainScene;
	}

	@Override
	protected int getLayoutID() {
		return R.layout.activity_main;
	}

	@Override
	protected int getRenderSurfaceViewID() {
		return R.id.renderview;
	}




ここでの処理はゲームを作成する時の最初に設定して、後々修正することはない部分ばかりです。

onCreateEngineOptionsメソッド
 ゲームの画面の設定します。
 今回は縦向き、タイトルバーなし、解像度、画面サイズ共に480*800にしました。

onCreateResourcesメソッド
 今回は使わない

getLayoutIDメソッド
 レイアウトファイル(activity_main.xml)のIDを返します。毎回固定。

getRenderSurfaceViewIDメソッド
 描画に使うViewのIDを返します、こちらも毎回固定です。

ビルドして実行


実行すると、何もない黒い画面が表示されます。
Sceneに何も書かなければ何も表示されませんね…(ヽ'ω`)
ログを確認すると、MainSceneが無事呼び出されていることが確認できますね。

一応これで最低限必要な基幹部分は作成が終わりました、ほんと最低限ですが…。





次回はSceneに画像を表示する処理を書いてきます。
今回使わなかったMainActivityのonCreateResourcesメソッドは次回使います。


       |
       |
 : : :::::::,. -─´、て
::: :: :::Σco===、!,_   画像を扱うにはSprite(スプライト)というのを使います。
: : :: :::::l´i(ノリハノリ)   これも使い方はcocos2dのCCSpriteと同じ…
 : : :::::ルlリ⊃⊂ヽ
 : : ::::(( //xxxxヽ、─────────────────
    /~~~
  ./


関連記事

【Androidアプリ開発】オープンソースゲームエンジン「AndEngine」のひな型(基幹部分)を作る” への1件のコメント

  1. ピンバック: 【Androidアプリ開発】オープンソースゲームエンジン「AndEngine」でSprite(スプライト)を表示する | 桜花満開/テンシホタル