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を用意し、遷移させた方がよいのかな?)
応用編 (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側では用意されていないようなアニメーション(曲線)を使用するときに、応用してみたいと思います。