サイトのトップへ戻る

AndEngineドキュメント 日本語訳

AndEngineを使ったAndroid ゲーム開発チュートリアル - Part 5 - リソースの読み込みとスプラッシュスクリーン

« 前へ | 次へ »

このパートではアセットを読み込んでScence上で使用する方法を説明します。

いくつかのリソース、特に常に使用されるようなリソースをあらかじめ読み込んでおくことは重要なことです。 しかし、メモリ不足が発生したり、プレイヤーが全ての読み込みが完了するまで待てなかったりするため、膨大なリソースを一度に読み込むことはできません。 リソースが必要なくなったら解放することも同じくらい重要です。

リソースをあらかじめ読み込んでおくために、通常はまず最初にスプラッシュスクリーンが表示されます。 これは必須ではありません。バックグラウンドでリソースを読み込んでいる間、まず最初にあなたのブランドや名前を表示し、次に何か目に見えるものを表示します。 進捗バーのようなものを表示することもできますが、スプラッシュだけでも大丈夫です。



Assets

以下の二つの画像をダウンロードして、プロジェクト内のassets/gfxディレクトに"badge.png" と"splash.png"という名前で保存してください。 assets ディレクトリは、ゲームで使用する画像や音楽や効果音やその他ステージ情報などを保存するのに使われます。



リソースを読み込む

Textureの読み込みを開始します。ここでは Texture、 Texture Region、 Texture atlas、 Sprite、 Fontについて理解する必要があります。:

Texture とはandorid端末のメモリに保存されるビットマップです。グラフィックハードウェアとOpenGLを使い、texture やtexture の一部をメモリから非常に高速で描写できます。

Texture Region とはAndEngineによって描写されるtexture の指定範囲のことです。 Texture Region は最大でTexture全体と同じ大きさにまですることができます。

Texture atlas とは基本的には Textureのラッパです。これを使い、複数の画像から一つの大きな Textureを作成することができます。

Sprite とはTexture Regionに関連付けられるオブジェクトのことです。texture regionを描写する位置や回転やその他の変換をengine へ伝えます。

AndEngine のFont とは、一文字サイズの小さなtexture region が集まった texture atlas です。 Font type is rendered onto a texture when you create it.

では、以下をResourceManager クラスに追加しましょう:


  //splash
  public ITextureRegion splashRegion;
  public ITextureRegion badgeRegion;
  private BuildableBitmapTextureAtlas splashTextureAtlas; 
  

  //splash
  public void loadSplashResources() {
    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");  
      splashTextureAtlas = new BuildableBitmapTextureAtlas(activity.getTextureManager(), 
          1024, 512, BitmapTextureFormat.RGBA_4444, TextureOptions.BILINEAR);
      
      splashRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(
          splashTextureAtlas, activity.getAssets(), "splash.png");
      
      badgeRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(
          splashTextureAtlas, activity.getAssets(), "badge.png");  

    
    try {
      splashTextureAtlas.build(new BlackPawnTextureAtlasBuilder<IBitmapTextureAtlasSource, BitmapTextureAtlas>(0, 0, 0));
      splashTextureAtlas.load();
      
    } catch (final TextureAtlasBuilderException e) {
      throw new RuntimeException("Error while loading Splash textures", e);
    }  
  } 
  
  public void unloadSplashResources() {
    splashTextureAtlas.unload();
  }

ここではTextureRegionを二つ、TextureAtlasを一つ定義しています。二つの画像を一つのTextureAtlasに読み込んでいます。 TextureAtlasに自動的に画像を配置するアルゴリズム、BlackPawnTextureAtlasBuilder を使用しています。 必要であれば手動で画像を配置することができますが、このアルゴリズムで十分でしょう。 最も重要なのは、TextureAtlasを十分な大きさで作成することです。 今回の画像は両方とも 512 x 512サイズです。そのため、TextureAtlasを 1024x512 のサイズで作成しています。

互換性を高めるために、TextureAtlasのサイズを2048 x 2048ピクセルか最低でも1024 x 1024ピクセルにする必要があります。 画像が配置できないような場合は、TextureAtlasのサイズを少し大きくしてください。 そして不要なごみが表示されるのを防ぐため、TextureAtlas内にあるTextureRegionの間にはスペースを空ける必要があります。詳細は後ほど説明します。 



Splash Scene

それでは、バッジとスプラッシュを表示するために、二つのSpriteを作成します。 また、DelayEntityModifier を使って half time 後にバッジを非表示にし、ロゴを表示します。 これが二つの画像を表示する一連の流れになります。

DelayEntityModifier とは、単純に指定した時間が経過するまで待つ EntityModifier です。各 EntityModifier では onModifierStarted メソッドや onModifierFinished メソッドを上書きして、modifier が有効になる前や後に任意のアクションを実行することができます。 また、これら二つのイベントを検知するめのリスナーを登録することもできます。

SplashScene クラスに以下のコードを追加するか、メソッドを変更するか、もしくはその両方を行ってください。: 


  Sprite splash;
  Sprite badge;


  @Override
  public void loadResources() {
    res.loadSplashResources();
  }

  @Override
  public void create() {
    splash = new Sprite(Constants.CW2, Constants.CH2, res.badgeRegion, vbom);
    attachChild(splash);
    badge = new Sprite(Constants.CW2, Constants.CH2, res.splashRegion, vbom);
    badge.setVisible(false);
    attachChild(badge);
    
    splash.registerEntityModifier(new DelayModifier(Constants.SPLASH_DURATION / 2000f) {

      @Override
      protected void onModifierFinished(IEntity pItem) {
        Debug.d(Constants.TAG, "Changing splash!");
        super.onModifierFinished(pItem);
        splash.setVisible(false);
        badge.setVisible(true);
      }
      
    });
    
    
  }

  @Override
  public void unloadResources() {
    res.unloadSplashResources();
  }

これでアプリを実行することができます。二秒間AndEngine のバッジが表示された後、さらに二秒間ロゴが表示されます。



現在のコード

この第五パートが終わるとあなたのプロジェクトはこのようになっているでしょう。どこか違っている場合はダウンロードをしてください。



次のパート

次のチャプターでは、メニューSceneについて説明します。