AS3でラベルごとにフレームスクリプトを実行する
AS3で、フレームアニメーションをスクリプト制御したいとき(実際には、アニメーションの中でif分岐したりしたい)、フレーム上にスクリプトを書いていくのはエレガントじゃないのでどうすりゃいいのかなぁ、と常々考えていたんですが、こういうのはどうでしょう。
これまで、ENTER_FRAMEでcurrentFrameを取得して分岐したいラベルなら実行、というやり方をとってみたり、addFrameScriptを試してみたりしましたが、今度はフレーム上に1行だけ関数を書いておいて、これで判断するというやり方です。
たとえば、クイズゲームを作っていて、AかBか選択肢を選んだら「司会者がうーんうーん、とうなって顔色がだんだん黒くなっていって、まだ数秒ためて」ついに正解とか残念、とか言うというアニメーションで、正解とか残念とか言うまでは1本のアニメーションで使いまわして、分岐するところまでいけばいい、と思っているのです。
正解とか残念とか言うところまでを1本のアニメーションにして、どちらを再生するかを最初に分岐するやり方でもいいけど、これだとクイズの数だけアニメーションが必要になっちゃう。
//フレームアクション(ラベル[label1]) checkFrame(currentLabel)
↑のようなスクリプトを書いて、↓のクラスをリンケージしたmcでやってみようと作ってみました。これだと一応動くけど、処理的にどうだろう。こういう書き方で実用的なんでしょうか。フレームスクリプトに詳しい皆様、教えてくださいませ。
package{
import flash.display.MovieClip
public class SampleFrameMC extends MovieClip{
public function checkFrame(label:String):void{
switch(label){
case "label1":
gotoAndPlay("atari")
break;
case "label2":
gotoAndStop("hazure")
break;
}
}
}
}