FlashLite1.1: call / tellTargetの使い方まとめ
久々に携帯Flashの話でも。
今回はよくFlashLite1.1で不便と言われる処理まわりについてです。
callの使い方
FlashLite1.1では関数が使えないので、あるフレームに処理を書いて、そのフレームラベルをcallで呼ぶ、というのが常套手段になっています。しかしこの方法だと引数が使えないので色々不便、というのも通例です。
そういう時は
/:currentNum = 0; call( "func/test" ); //----------------------------------------------- //"func"ムービークリップの"test"フレーム trace( /:currentNum ); //0
といった感じでルート変数を使った引数渡しっぽい処理にします。ちなみにcallを使う時は、一つそれ専用のムービークリップを用意して、その中にフレームラベルで分けて配置すると管理しやすく、かつcallを呼ぶパスを統一できてコーディング的にも気分が良くなります。
こんな感じで。
tellTargetの使い方
一方、tellTargetはターゲットに指定したMCのタイムラインで処理が行われるので、ローカル変数を使う事ができます。先ほどと同様の処理はこんな感じに。
tellTarget( "func" ) { currentNum = 0; trace( currentNum ); //0 }
とにかく軽量化したい携帯Flashでは、変数名すら切り詰める為、結果として変数の管理が煩雑になりがちです(サンプルコードでは分かりやすさのため文字数を贅沢に使ってますが)。そういう状況でどこからでもアクセスできるルート変数を乱用するのは危険なので、ローカル変数が使えるのはまずまずメリットがあると言えます。
また、eval擬似配列を引数に渡すことも可能なので、
//"red","green","blue"のインスタンス名を持ったMCを配置した"target"MCに対して eval( "colorList" add 0 ) = "red"; eval( "colorList" add 1 ) = "green"; eval( "colorList" add 2 ) = "blue"; tellTarget( "target/" add eval( "colorList" add random( 3 ) ) ) gotoAndPlay( 2 );
といった感じにもできます。これを色々な階層やフレームをまたいで使えば、関数が無いとめんどくせー、といった処理も何とか実現できますね。
というわけで、FlashLiteでのやりようもまだまだあるっちゃあるのかなーとは思います。
やはり容量の制約が厳しいので「可能性は無限大」とは言えませんが笑。
この他のFlashLite Tipsは、手前味噌で恐縮ですが、何気に強力な当_level0 "Flash Lite"タグ一覧でどうぞ!