サイトのトップへ戻る

AndEngineドキュメント 日本語訳

ゲームチュートリアル完全版 - part 4. シーン管理:

このチュートリアルで最も重要な主題の一つは、シーン管理です。  この理由から、新しいクラスを二つ作成します。まずは、それらの簡単に説明します。:
  • BaseScene - このクラスは、ゲーム内で作成された各Scene を表す基本的なものです。これは抽象クラスで、基本的なScene ロジックを制御します。
  • SceneManager - 名前だけですぐ分かるかもしれませんが、このクラスを使い、Scene間の切り替えや現在のSceneやSceneタイプの捕捉など、Sceneを管理することができます。


1. BaseScene クラス:
package com.matimdev.base;

import org.andengine.engine.Engine;
import org.andengine.engine.camera.Camera;
import org.andengine.entity.scene.Scene;
import org.andengine.opengl.vbo.VertexBufferObjectManager;

import android.app.Activity;

import com.matimdev.manager.ResourcesManager;
import com.matimdev.manager.SceneManager.SceneType;

/**
 * @author Mateusz Mysliwiec
 * @author www.matim-dev.com
 * @version 1.0
 */
public abstract class BaseScene extends Scene
{
    //---------------------------------------------
    // VARIABLES
    //---------------------------------------------
    
    protected Engine engine;
    protected Activity activity;
    protected ResourcesManager resourcesManager;
    protected VertexBufferObjectManager vbom;
    protected Camera camera;
    
    //---------------------------------------------
    // CONSTRUCTOR
    //---------------------------------------------
    
    public BaseScene()
    {
        this.resourcesManager = ResourcesManager.getInstance();
        this.engine = resourcesManager.engine;
        this.activity = resourcesManager.activity;
        this.vbom = resourcesManager.vbom;
        this.camera = resourcesManager.camera;
        createScene();
    }
    
    //---------------------------------------------
    // ABSTRACTION
    //---------------------------------------------
    
    public abstract void createScene();
    
    public abstract void onBackKeyPressed();
    
    public abstract SceneType getSceneType();
    
    public abstract void disposeScene();
}

前にも言いましたが、これは作成する全てのscene の"中核"となるクラスです。これは拡張として使用されます。抽象メソッドを使用して基本的なsceneロジックを提供します。 またこのクラスは、前回作成したResourcesManager内で最もよく使用されるものです。 SceneTypeを戻り値として返す、getSceneTypeがあります。 - SceneTypeはSceneManager クラス内で定義するので、表示されたエラーは無視してシーンマネージャーを作成する次の手順に進んでください。



2. SceneManager クラス:
これは、scenes 間の切り替えを行い、現在表示されているsceneを捕捉し続ける、ゲームで本当に重要なクラスです。 シングルトンホルダーを使用しており、グローバルレベルでこのマネージャーを使用できます。 シーンの種類を格納したenum型の値も持っています。 また、ゲームで使用するscene用に四つのBaseScene オブジェクト(スプラッシュ用、ローディング用、メニュー用、ゲームシーン用)を作成します。
package com.matimdev.manager;

import org.andengine.engine.Engine;

import com.matimdev.base.BaseScene;

/**
 * @author Mateusz Mysliwiec
 * @author www.matim-dev.com
 * @version 1.0
 */
public class SceneManager
{
    //---------------------------------------------
    // SCENES
    //---------------------------------------------
    
    private BaseScene splashScene;
    private BaseScene menuScene;
    private BaseScene gameScene;
    private BaseScene loadingScene;
    
    //---------------------------------------------
    // VARIABLES
    //---------------------------------------------
    
    private static final SceneManager INSTANCE = new SceneManager();
    
    private SceneType currentSceneType = SceneType.SCENE_SPLASH;
    
    private BaseScene currentScene;
    
    private Engine engine = ResourcesManager.getInstance().engine;
    
    public enum SceneType
    {
        SCENE_SPLASH,
        SCENE_MENU,
        SCENE_GAME,
        SCENE_LOADING,
    }
    
    //---------------------------------------------
    // CLASS LOGIC
    //---------------------------------------------
    
    public void setScene(BaseScene scene)
    {
        engine.setScene(scene);
        currentScene = scene;
        currentSceneType = scene.getSceneType();
    }
    
    public void setScene(SceneType sceneType)
    {
        switch (sceneType)
        {
            case SCENE_MENU:
                setScene(menuScene);
                break;
            case SCENE_GAME:
                setScene(gameScene);
                break;
            case SCENE_SPLASH:
                setScene(splashScene);
                break;
            case SCENE_LOADING:
                setScene(loadingScene);
                break;
            default:
                break;
        }
    }
    
    //---------------------------------------------
    // GETTERS AND SETTERS
    //---------------------------------------------
    
    public static SceneManager getInstance()
    {
        return INSTANCE;
    }
    
    public SceneType getCurrentSceneType()
    {
        return currentSceneType;
    }
    
    public BaseScene getCurrentScene()
    {
        return currentScene;
    }
}

また、現在のscene typeと現在のscene への参照を取得するための便利なgetterメソッドもあります。これはゲーム開発が進むと役に立ってくるでしょう。 最も重要なメソッドであるsetScene(SceneType sceneType) があります。このメソッドは他のSceneの表示を行い、表示されたSceneとそのタイプへの参照を保存することでそのSceneを捕捉し続けます。

これで完了です。 - scene管理システムを使用する準備ができました。とても簡単でしたよね? それでは次の手順へ進みましょう。次は最初の sceneであるスプラッシュスクリーンを作成します。次の記事へ進んでください!

前の記事 次の記事