ゲーム開発での便利な 'パターン'についての記事で述べたように、複数のActivityを使うのではなく複数のSceneを使うほうが良いです。 このチュートリアルでは、スプラッシュスクリーンの作成を制御するスマートな方法を説明します。 これは thepi 氏が公開したコードを編集したものです。最新バージョンの AndEngine GLES2 向けに調整し、有用なコードをいくつか追加しています。 このチュートリアルのページ下部に、クールなAndEngine マークのスプラッシュスクリーンが実装された、準備済みプロジェクトがあり、ダウンロードできます。
この簡単なアプローチを使うことで、ゲームリソース読み込み中に見栄えのいいスプラッシュスクリーンを表示でき、黒塗り画面を表示するよりも良くなるでしょう。
private BitmapTextureAtlas splashTextureAtlas; private ITextureRegion splashTextureRegion; private Sprite splash;onCreateResources() 内で、スプラッシュスクリーンの画像とそのテクスチャのみを読み込みます。
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/"); splashTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 256, 256, TextureOptions.DEFAULT); splashTextureRegion =BitmapTextureAtlasTextureRegionFactory.createFromAsset(splashTextureAtlas, this,"splash.png", 0, 0); splashTextureAtlas.load(); pOnCreateResourcesCallback.onCreateResourcesFinished();では、スプラッシュスクリーンを初期化しましょう:
private void initSplashScene() { splashScene = new Scene(); splash = new Sprite(0, 0, splashTextureRegion, mEngine.getVertexBufferObjectManager()) { @Override protected void preDraw(GLState pGLState, Camera pCamera) { super.preDraw(pGLState, pCamera); pGLState.enableDither(); } }; splash.setScale(1.5f); splash.setPosition((CAMERA_WIDTH - splash.getWidth()) * 0.5f, (CAMERA_HEIGHT - splash.getHeight()) * 0.5f); splashScene.attachChild(splash); }
何をしているのかと言うと、 splash sceneとsplash Spriteを初期化しています。また、sprite のディザリングを有効にしています (ディザリングを有効にすることによって、スプラッシュスクリーンで使用する画像のギザギザが滑らかに見えます)。 ディザリングについて学ぶにはこのチュートリアルを参照してください。また、splash sceneの中央にsprite を貼り付けています。
initSplashScene(); pOnCreateSceneCallback.onCreateSceneFinished(this.splashScene);以下のコードを onCreateScene()内に記述します。
mEngine.registerUpdateHandler(new TimerHandler(3f, new ITimerCallback() { public void onTimePassed(final TimerHandler pTimerHandler) { mEngine.unregisterUpdateHandler(pTimerHandler); loadResources(); loadScenes(); splash.detachSelf(); mEngine.setScene(mainScene); } })); pOnPopulateSceneCallback.onPopulateSceneFinished();上記ではどういった処理をしているのでしょうか? ゲームリソースを読み込んだ後、 scene をメインの sceneに変更して splash screen spriteを取り外しています。
また、以下のメソッドを実装します (このメソッドの動作を理解したい場合は、それらのコメントを確認してください)
public void loadResources() { // Load your game resources here! } private void loadScenes() { // load your game here, you scenes mainScene = new Scene(); mainScene.setBackground(new Background(50, 50, 50)); }
これで完了です。実行する前に、assets/gfx フォルダにスプラッシュスクリーンの画像を追加するのを忘れないでください! ページ下部では、以下の画面が表示される作成済みプロジェクトのテンプレートをダウンロードできます。
コードのテンプレートにはいくつか追加がされています (終了処理やスプラッシュスクリーンが表示されている間はゲームの終了を防止する処理など)。 スクロールダウンして プロジェクトをダウンロードしてください。splashscreentemplate.rar |