サイトのトップへ戻る

AndEngineドキュメント 日本語訳

ゲームチュートリアル完全版 - part 5. スプラッシュスクリーンのsceneを作成する:

さて、"管理"クラスについては全て説明したので、ついに次のステップへと進むことができます。scenes を作成してゲーム自体を作るのです。 この記事の前パートに記載されたクラス図に記載された中から、まずはスプラッシュスクリーンのscene を作成します。 メニューのリソースを読み込んでいる間、小さなバッジを表示します。 これでプレイヤーは、リソースを読み込む間に真っ暗な画面を見させられることがなくなります。 まずはスプラッシュスクリーンのリソースのみを読み込み、それからスプラッシュスクリーンを表示し、最後に他のリソースを読み込みます。とても簡単です。



1. スプラッシュリソースを読み込む:
まずは、スプラッシュスクリーンのリソースの読み込みについてです。 この例では、スプラッシュスクリーン用の簡単なバッジを使用します。今回は私自身のバッジを使用しています(笑)。
Picture
  • スプラッシュ用の画像ファイルを assets/gfx/ フォルダ内に配置します。
  • このファイルの名前は splash.pngとします。
  • ResourcesManager クラスを開いて、この画像を読み込みます。 まずはテクスチャ領域とスプラッシュテクスチャの領域を作成しましょう。
    public ITextureRegion splash_region;
    private BitmapTextureAtlas splashTextureAtlas;
    
  • 前に作成した loadSplashScreen() メソッド内でスプラッシュ用ファイルを読み込みます。
    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
    splashTextureAtlas = new BitmapTextureAtlas(activity.getTextureManager(), 256, 256, TextureOptions.BILINEAR);
    splash_region = BitmapTextureAtlasTextureRegionFactory.createFromAsset(splashTextureAtlas, activity, "splash.png", 0, 0);
    splashTextureAtlas.load();
    
  • また、スプラッシュテクスチャの読み込み解除を司るメソッドの準備をします (このメソッドはゲームリソースの読み込みが完了した後に実行され、スプラッシュscene からメニューscene への切り替えをします)。このメソッドは前に作成した unloadSplashScreen()内に記述します。
    splashTextureAtlas.unload();
    splash_region = null;
    

こうしてスプラッシュ用リソースの読み込み/読み込み解除を司るコードの準備ができました。 それではスプラッシュsceneの作成に移りましょう。詳細は以下です。



2. スプラッシュsceneを作成する:
  • SplashSceneという名前のクラスを新規に作成します。
  • 拡張として、前に作成した抽象クラスBaseSceneを使います。
  • eclipse によって、未実装のメソッド(スーパークラスの)を追加するように求められるでしょう。
package com.matimdev.scene;

import org.andengine.engine.camera.Camera;
import org.andengine.entity.sprite.Sprite;
import org.andengine.opengl.util.GLState;

import com.matimdev.base.BaseScene;
import com.matimdev.manager.SceneManager.SceneType;

/**
 * @author Mateusz Mysliwiec
 * @author www.matim-dev.com
 * @version 1.0
 */
public class SplashScene extends BaseScene
{
    @Override
    public void createScene()
    {

    }

    @Override
    public void onBackKeyPressed()
    {

    }

    @Override
    public SceneType getSceneType()
    {

    }

    @Override
    public void disposeScene()
    {

    }
}
これらのメソッドについて理解するのはとても簡単です。 では、単にscene type(SceneManagerで定義されたenum型の値) の戻り値を返すgetSceneType()内の処理から記述しましょう。
@Override
public SceneType getSceneType()
{
    return SceneType.SCENE_SPLASH;
}
それでは、sceneの作成を制御しましょう。スプラッシュには一つのspriteだけが必要です。
  • スプラッシュで使うsprite用のフィールドを新規に作成します:
    private Sprite splash;
    
  • createScene() メソッド内でこのspriteを初期化します。:
    splash = new Sprite(0, 0, resourcesManager.splash_region, vbom)
    {
        @Override
        protected void preDraw(GLState pGLState, Camera pCamera) 
        {
           super.preDraw(pGLState, pCamera);
           pGLState.enableDither();
        }
    };
            
    splash.setScale(1.5f);
    splash.setPosition(400, 240);
    attachChild(splash);
    
上記で行ったのは、スプラッシュ用spriteを初期化して画面中央へ貼り付けることです。 また、ディザリングを有効にすることもできます - to improve quality, since its gradient based art (ディザリングについての詳細情報は、文中のリンク先を参照してください)
  • 次の手順では、sceneの破棄を制御します。破棄はdisposeScene()メソッド内で実行します:
    @Override
    public void disposeScene()
    {
        splash.detachSelf();
        splash.dispose();
        this.detachSelf();
        this.dispose();
    }
    

これはスプラッシュのspriteを破棄し、sceneから取り外します。これで、スプラッシュ用のscene は完成しました。それではactivity内でこれを初期化する必要があります。詳細は以下。



3. スプラッシュ用のsceneを初期化する:
  • SceneManager クラスを開いて、sceneの初期化を司るメソッドを作成します。 activity内で使用する必要があるため、メソッドの引数にはOnCreateSceneCallbackを使用します。
    public void createSplashScene(OnCreateSceneCallback pOnCreateSceneCallback)
    {
        ResourcesManager.getInstance().loadSplashScreen();
        splashScene = new SplashScene();
        currentScene = splashScene;
        pOnCreateSceneCallback.onCreateSceneFinished(splashScene);
    }
    
  • またスプラッシュ用のsceneの破棄を司るメソッドを作成します (必要なくなった時に破棄するために。要するに、メニュリソースの読み込みに成功した後に実行します)
    private void disposeSplashScene()
    {
        ResourcesManager.getInstance().unloadSplashScreen();
        splashScene.disposeScene();
        splashScene = null;
    }
    
  • ActivityのonCreateScene 内でcreateSplashScene() メソッドを実行します。
    public void onCreateScene(OnCreateSceneCallback pOnCreateSceneCallback) throws IOException
    {
        SceneManager.getInstance().createSplashScene(pOnCreateSceneCallback);
    }
    
  • スプラッシュを表示している間、特定のタスクを実行します (ActivityのonPopulateScene 内で)
    public void onPopulateScene(Scene pScene, OnPopulateSceneCallback pOnPopulateSceneCallback) throws IOException
    {
        mEngine.registerUpdateHandler(new TimerHandler(2f, new ITimerCallback() 
        {
                public void onTimePassed(final TimerHandler pTimerHandler) 
                {
                    mEngine.unregisterUpdateHandler(pTimerHandler);
                    // load menu resources, create menu scene
                    // set menu scene using scene manager
                    // disposeSplashScene();
                    // READ NEXT ARTICLE FOR THIS PART.
                }
        }));
        pOnPopulateSceneCallback.onPopulateSceneFinished();
    }
    

上記で行ったこと:
別のタスク(メニューリソースとメニューsceneの読み込み、メニューsceneの設定)が実行されるまで、スプラッシュスクリーンを表示します。

この手順では、ゲームを実行した後にスプラッシュスクリーンが表示されるでしょう(今のところはずっど表示され続けます)。 次の記事では、メニューシーンを作成して、読み込み後に画面を切り替える方法を説明します。 続きは次の回を参照してください。

前の記事 次の記事



エンジェル戦記