AndEngine/SceneをFadeOutで切り替える

AndEngineのゲーム開発もそろそろ終盤。
だいぶ時間かかってしまっていたのですが、なんとか今週には終了させたい。。。


現在の開発中のアプリは、

BaseGameActivity ・・・ 1つ
Scene        ・・・ 多数


という構成なので、ユーザーによって特定のイベント(Touchイベント)が行われたとき、Sceneが切り替わるようにしました。そのときに考えたものを、今日はまとめてみます。

基本編

■例 scene1 → scene2 に切り替えるとき

mEngine.setScene(scene1);


というメソッドを呼び出せば、簡単にSceneを切り替えられます。


cocos2dだと、FadeIn, FadeOut, PageCurl など、Sceneを切り替える様々な手段があるのですが、AndEngine Formsの情報より、

Will be great if AndEngine supports those kind of transitions but between Scenes (no Activities). Something like "scene.changeTo(otherScene, Transition.FLIP)".


アニメーション付きでScene間を切り替えられるメソッドは用意されていないようです。。。


このスレッドを立てた人は、Activityを複数用意し、以下の方法で、アニメーション付き遷移を実現させているみたいです。

Activity遷移時のアニメーション

以下のメソッドを使用。

void overridePendingTransition(int enterAnim, int exitAnim)

Call immediately after one of the flavors of startActivity(Intent) or finish() to specify an explicit transition animation to perform next.

これ、明日試してみようと思います。

(むしろ、僕のアプリも、多数のActivityを用意し、遷移させた方がよいのかな?)


*参考
Android SDK reference

応用編 (FadeOut っぽくみせる)

単にメソッドを呼び出してSceneを切り替えるだけだとあじけなかったので、

scene1 → 真っ黒な画面 → scene2

という感じで、FadeOutしているかのように見せる方法を編み出してみました。

 @Override
 public Scene onLoadScene() {
      //背景が黒いSceneを作成する。
	Scene blackScene = new Scene(1);
	blackScene.setBackground(new ColorBackground(0.0f, 0.0f, 0.0f));
        
        ........省略
 }

 public void changeScene() {
        //背景黒のSceneをセット
	mEngine.setScene(blackScene);

        //0.3秒後に jumpToSceneクラス内の、run() を呼び出す
	Timer timer = new Timer();
	timer.schedule(new JumpToScene2(), 300);
 }

 class JumpToScene2 extends TimerTask {

         public void run() {
     //scene2に切り替える
	       mEngine.setScene(scene2);
	  }	
 }


この方法で、0.3秒間、黒い画面が表示され、その後、scene2に切り替わります。


Timerと、TimerTask は初めて使用したのですが、AndEngine側では用意されていないようなアニメーション(曲線)を使用するときに、応用してみたいと思います。