久々に携帯Flashの話でも。
今回はよくFlashLite1.1で不便と言われる処理まわりについてです。

callの使い方

FlashLite1.1では関数が使えないので、あるフレームに処理を書いて、そのフレームラベルをcallで呼ぶ、というのが常套手段になっています。しかしこの方法だと引数が使えないので色々不便、というのも通例です。
そういう時は

/:currentNum = 0;
call( "func/test" );

//-----------------------------------------------

//"func"ムービークリップの"test"フレーム
trace( /:currentNum ); //0

といった感じでルート変数を使った引数渡しっぽい処理にします。ちなみにcallを使う時は、一つそれ専用のムービークリップを用意して、その中にフレームラベルで分けて配置すると管理しやすく、かつcallを呼ぶパスを統一できてコーディング的にも気分が良くなります。

label.png

こんな感じで。

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"タグ一覧でどうぞ!

サンプルファイル(parameterSample.zip・Flash CS3)

HTML5飯