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する、というのが正しい使い方なのか!!?

この記事には、カテゴリ AS3 タグは , がつけられています。