AS3でタイムラインスクリプトを書きたければaddFrameScript()を使う
AS3でムービークリップにラベルを設定してフレームスクリプト(stop()とか)を書く方法をメモ。
addFrameScriptという関数があって、これを指定してやればいいらしいです。引数は2つで、最初のがフレームラベルかフレーム番号、2番目が関数です。いままでフレームラベルチェック用のENTER_FRAMEをリスンしてたのでこれでかなり楽になったよ!! と書きたかったんですが、なぜか指定どおりに動きません。なぜだ。教えてくださいませませ…
以下の例はステージに置いた test_mc のクラスファイルです。
var testmc = new TestClass(test_mc)
フレーム1でインスタンスにクラスをあてます。フレーム4に"label1"、フレーム9に"label2"を書いてあります。フレームアクションは何も書きません。
package{ import flash.display.MovieClip; public class TestClass extends MovieClip{ var my_mc:MovieClip function TestClass(mc){ my_mc = mc mc.addFrameScript("label1",func1) mc.addFrameScript(9,func2) } function func1():void{ trace(my_mc.currentFrame) //結果:1 } function func2():void{ trace(my_mc.currentFrame) //結果:10 } } }
実行結果は、フレーム4にあるはずのlabel1がフレーム1で実行されちゃっているのと、フレーム9で実行するはずのfunc2がフレーム10で実行されちゃってるという不具合があります。
追記。うまく動かないのはもしかすると、「自分自身のクラスで自分にaddFrameScriptしているからなのかも。他のクラスから動的に作った(リンケージの)mcに対してaddFrameScriptする、というのが正しい使い方なのか!!?