ページへ戻る

− Links

 印刷 

Starling+Feathersで画面遷移 のバックアップソース(No.2) :: NJF Wiki

xpwiki:Starling+Feathersで画面遷移 のバックアップソース(No.2)

« Prev[5]  Next »[6]
Feathersには画面遷移を行うための、ScreenとScreenNavigatorというクラスがある。

Screenが画面そのもので、ScreenNavigatorがそれを管理するクラス。

*Screen [#p1fd9085]

Screenはそのまま使うより、継承して使うことが多い。そして、initializeメソッドをオーバーライドして初期化を行う。

 override protected function initialize():void
 {
      super.initialize();
      //ここで初期化する
 }

ScreenはSpriteを継承しているので、addChildで描画オブジェクトを付け加えられる。 ScrollScreenやPanelScreenを使うとスクロールしたりヘッダーやフッターをつけた画面も簡単に作れる。

*ScreenNavigator [#b78a55bf]

ScreenをScreenNavigatorに登録すると画面遷移が簡単にできるようになる。
ScreenNavigatorへの登録はScreenNavigatorItemを使う。

 var screenNavigator:ScreenNavigator = new ScreenNavigator();
 baseSp.addChild(screenNavigator);
 var screenNavigatorItem:ScreenNavigatorItem = new ScreenNavigatorItem( new TestScreen1() );
 screenNavigator.addScreen( "screen1", screenNavigatorItem );

あとは、

 screenNavigator.showScreen("screen1");

とすればそのスクリーンが表示される。

ここで注意しないといけないのは、ScreenNavigatorItemはScreenのクラスとインスタンスのどちらかをコンストラクタ引数として取り得ることである。つまり、

 new ScreenNavigatorItem( TestScreen1 );

としても、

 new ScreenNavigatorItem( new TestScreen1() );

としてもScreenNavigatorItemのインスタンスは作れる。これらは一見同じように動作するが、内部的には異なる動作をする。

クラスを与えたときは、''画面遷移のときにdisposeが呼ばれて前のScreenが破棄されメモリが解放される''。

インスタンスを与えたときは、''そのインスタンスが保持され次回に再利用されるので画面遷移でもdisposeが呼ばれない''。

よってメモリを節約したいときはクラスを与えて初期化した方が良い。しかし、画面遷移のたびにdisposeが呼ばれて次にまたインスタンス作成となるとかなり処理がもたつく。メモリに余裕があるならできるだけインスタンスを与えて初期化した方が良い。

ちなみに私は自動でdisposeが行われないように全てインスタンスで初期化し、自前のdisposeメソッドを作って必要なタイミングに必要なメモリだけ解放している。

ScreenNavigatorItemで便利なのは画面遷移のイベントを設定できることである。つまり、

 screenNavigator.setScreenIDForEvent( "screen1Show", "screen1" );

としておくと、ScreenNavigatorに登録したスクリーンで

 dispatchEventWith("screen1Show");

とすると、screen1のIDの画面へと遷移する。実際にはshowScreenよりもこちらの方がよく使う。

画面遷移のアニメーションも好みの物に変更できる。たとえばフェイドインなら、

 screenNavigator.transition = Fade.createFadeInTransition();

となる。


(制作中)

« Prev[5]  Next »[6]