どうもこんにちは、kijimaです。さいきんはドラムとMaxとiPhoneをよくいじってます。


Progressionを使い始めて早2ヶ月経ちました。最初はお作法に慣れるのに時間がかかりましたが、ようやく理解してきたことも多いので、ここいらでちょとメモしておきます。


特集:Flashのフレームワーク「Progression3」を始めてみよう!|gihyo.jp … 技術評論社

Progression始めるなら、この連載記事を熟読するのがオススメ。とてもよくまとまっていて、はじめの一歩の参考になります。この記事内でも触れられているように、Progressionの実装で一番重要なのは、実装したい遷移をシーンの_onLoad, _onInit, _onGoto, _onUnloadにいかにうまくあてはめていくか、という部分だと思います。


_onLoad このシーンを通過、またはこのシーンに到着したときに呼ばれる。 _onInit このシーンに到着したときに呼ばれる。このシーンより下の階層が目的地の場合は呼ばれない(通過、なので_onLoadが呼ばれる) _onGoto このシーンから出発するときに呼ばれる。 _onUnload 他のシーンに移動するために通過するときやこのシーンから出発するときに呼ばれる。


それぞれのシーンに生成したクラス内から、まったく他のシーン内にキャストしたインスタンスの関数や変数を参照したい場合がよくあると思います。


前回のエントリー時には、使い回すインスタンスや変数はSingletonパターンのクラスにつっこんでおいて、各クラスからSingletonクラス内に保持しているものを参照する、というやり方を説明したんですが、なにもすべてその方法でやる必要はありませんでした。


Progression - Framework for Flash >>> クラススタイルガイド

たとえばクラススタイルのサンプルでいうところのIndexScene内に、 featureSceneという子シーンを生成していますね。で、そのfeatureScene内にfeaturePageというCastSpriteを継承したインスタンスを生成しています。

で、ここに「page.id ="FeaturePage";」と一行書き加えてidを付与しておきます。


public function FeatureScene() { // FeaturePage を作成します。 // ※あらかじめライブラリにシンボルとして登録済みです。 page = new FeaturePage(); page.id = "FeaturePage"; }


続いて、featurePage.as内には下記の変数を定義しておきます。

public var hoge:String = "HOGE";


そして、featurePageとは離れたところにあるContactButton.asから、このhoge変数を参照したいと思います。


テストなので適当ですが、ContactButtonにロールオーバーしたときにtraceでhoge変数を出力してみます。ここで登場するのが「getInstanceById()」。


protected override function _onCastRollOver():void { var featurePage:FeaturePage = getInstanceById("FeaturePage") as FeaturePage; trace(featurePage.hoge);// -> 出力「HOGE」 // 実行したいコマンドを登録します。 addCommand( // 任意のコマンドを記述してください。 );


わざわざSingletonのクラスを使ったり、EventDispatcherやtaka:niumさんのCustomEventを使ってクラス内をハシゴして参照していたんですが、これで解消してしまいました。。


もっと早くに理解して使っていれば…。また気づいたことがあれば、メモします。


HTML5飯