サイトのトップへ戻る

AndEngineドキュメント 日本語訳

AndEngineを使ったAndroid ゲーム開発チュートリアル - Part 3 - Game Activity

« 前へ | 次へ »

今からコーディングを開始します。各パートの終わりには、携帯上で起動できるアプリが完成していることでしょう。

まず最初に、環境を設定する必要があります。このチュートリアルの目的のために、既にEclipseとAndEngine ライブラリは設定済みにしておいてください。. まだ設定していない場合は、私のAndEngine チュートリアルの入門編を確認できます。

AndEngine のs-ス取得方法については、ZIPバージョンをダウンロードしても GitHub チュートリアルを使ってもどちらでも構いません。

注意: このチュートリアルではAndEngine の GLES2-AnchorCenter ブランチを使用します。

このパートでは、使用する予定の基本的なactivityについて説明します。 このactivity クラスでは、ゲームエンジンとマネージャーの初期化を行う必要があります。 You can see plenty of examples where the activity takes care of the game too. But try to separate functionality - rule of thumb: You should be able to describe the class responsibility by one sentence. If you need to use more than one, it's time to split the class.

では、Android アプリケーションのプロジェクトを作成しましょう (Eclipse -> 新規作成)。

「次へ」をクリックします。今のところアイコンについては気にせず、デフォルトのままにしてください。 再度「次へ」をクリックして、 blank activity を作成します。 activity の名前はGameActivityとしましょう。Javaクラスもそれと同じ名前になります。

プロジェクトのプロパティを開いて、android のライブラリとしてAndEngine を追加します。 必要であれば、再度入門編でやり方を確認してください。



Game Activity クラス

GameActivity は、Android の基本的なactivity クラスであるActivityを継承しています。 この継承元を、AndEngineの基本的なactivity クラスであるBaseGameActivity に変更します。 BaseGameActivity はAndroid の既定の動作に倣い、Engine Options、Engine、Resources 、Scene 作成といった処理を実装するよう要求してきます。 この時エラーが表示され、BaseGameActivityの抽象メソッドを実装する必要があります。


public class GameActivity extends BaseGameActivity  {
}

ではまず、これらの抽象メソッドの空の定義を追加して実装します。 今回は抽象メソッド以外にもいくつかのメソッドを上書き実装しているので注意してください。:


package is.kul.squongtutorial;

import java.io.IOException;
import org.andengine.engine.Engine;
import org.andengine.engine.options.EngineOptions;
import org.andengine.entity.scene.Scene;
import org.andengine.ui.activity.BaseGameActivity;

import android.view.KeyEvent;

public class GameActivity extends BaseGameActivity  {
  @Override
  public synchronized void onResumeGame() {
    super.onResumeGame();
  }

  @Override
  public synchronized void onPauseGame() {
    super.onPauseGame();
  }
  
  @Override
  public EngineOptions onCreateEngineOptions() {
    return null;
  }

  @Override
  public Engine onCreateEngine(EngineOptions pEngineOptions) {
    return super.onCreateEngine(pEngineOptions);
  }

  @Override
  public void onCreateResources(
      OnCreateResourcesCallback pOnCreateResourcesCallback)
      throws IOException {
    pOnCreateResourcesCallback.onCreateResourcesFinished();
  }

  @Override
  public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback)
      throws IOException {
    pOnCreateSceneCallback.onCreateSceneFinished(null);
  }

  @Override
  public void onPopulateScene(Scene pScene,
      OnPopulateSceneCallback pOnPopulateSceneCallback)
      throws IOException {
    pOnPopulateSceneCallback.onPopulateSceneFinished();
  }
  
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    return super.onKeyDown(keyCode, event);
  }

}


それでは、いくつかのメソッドを実装しましょう。基本的な定数(スクリーンサイズ)とCameraオブジェクトを追加することから始めましょう。 今回は720x1200 ピクセルを使っているので注意してください。AndEngine は、このサイズを任意のスクリーンサイズに合わせるよう制御します。

Camera はscene 内で表示する範囲を定義します。Scene は 5000px の広さまで設定でき、もしCameraが1200ピクセルの広さの場合はだいたいSceneの1/4が表示されます。


  public static final int CW = 720;
  public static final int CH = 1200;
  Camera camera;

次に以下のメソッドを実装します。 AndEngine はまず最初にこのメソッドを呼び出し、Engineに設定するオプション値を受け取ります。

Engine はゲームループを制御しています。カレントSceneを呼び出して全てのオブジェクトを描写し、必要な計算とリピート処理を行います。 また、画面に scene をどのように描写するかなども制御しています。

ここで新規にcamera を作成します (最も簡単なのは画面と同じサイズを設定する方法です)。 それからフルスクリーンを選択し(一つ目の引数にtrueを指定)、画面にはRatioResolutionPolicy を使用します。ResolutionPolicyの詳細についてはここを参照してください。 それから縦画面固定に設定し、Cameraを引数として設定します。 BGMと効果音は両方とも使用します。 wake lock とはプレイ中は画面がオフにならないという意味です。


  @Override
  public EngineOptions onCreateEngineOptions() {
    camera = new Camera(0, 0, CW, CH);
    IResolutionPolicy resolutionPolicy = new RatioResolutionPolicy(CW, CH);
    EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.PORTRAIT_FIXED, resolutionPolicy, camera);
    engineOptions.getAudioOptions().setNeedsMusic(true).setNeedsSound(true);
    engineOptions.setWakeLockOptions(WakeLockOptions.SCREEN_ON);
    return engineOptions;
  }

一秒間に最大で60フレームの描写までとするengine を作成します。これによりバッテリーが節約できます。30 FPS と設定しても、スムーズなゲームプレイに問題はないでしょう。 この数値を使ってテストしてみましょう FPS用の定数を用意すると、値を変更しやすくなるので良いかもしれません。 定数を追加して、メソッドの内部処理を実装します:


  public static final int FPS_LIMIT = 60;

  @Override
  public Engine onCreateEngine(EngineOptions pEngineOptions) {
    Engine engine = new LimitedFPSEngine(pEngineOptions, FPS_LIMIT);
    return engine;
  }

Notice some methods are implemented and they call some callbacks. これらメソッドは、特定の処理が終わるとengine へ通知を行うようになっています。 次のパートでリソースとSceneの作成を実装することにしましょう。

これで、アプリを実行すると素敵な黒い画面が表示されるようになりました。 Thanks to the resolution policy and the fact that we have created non-standard 720x1200 pixels area on the screen, you should see white stripes either on the left and right or top and bottom. これが、AndEnginで異なる解像度に対応する方法です。心配しないでください。このチュートリアルでは、空白部分を非表示にする方法も説明します。



次のパート

次のパートでは、SceneManagementの使い方について説明します。