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 クラス内で定義するので、表示されたエラーは無視してシーンマネージャーを作成する次の手順に進んでください。
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であるスプラッシュスクリーンを作成します。次の記事へ進んでください!
前の記事 | 次の記事 |