AS2 and AS3.
... onStart:value, ...
value
:Function — トゥイーン開始時に実行されるファンクション。当該トゥイーン中に指定されているプロパティの数にかかわらず、一度のみ実行される。ファンクションのスコープ(イベントが実行されるオブジェクト)は、onCompleteScope
パラメーターで特に指定されてない場合は、ターゲットオブジェクト自身。
// myMovieClipを不可視化。フェードインの開始時に可視化。 (AS2) showUp = function() { this._visible = true; }; myMovieClip._visible = false; myMovieClip._alpha = 0; Tweener.addTween(myMovieClip, {_alpha:100, time:1, delay:4, onStart:showUp});
// 同じ事を匿名関数を使って実現 myMovieClip._visible = false; myMovieClip._alpha = 0; Tweener.addTween(myMovieClip, {_alpha:100, time:1, delay:4, onStart:function() { this._visible = true; }});
このパラメーターに渡される参照はファンクションのみである。従って、実行するファンクションに()を使うなどして引数を渡すことはできない。そのような場合には、onStartParamsパラメーターを使う必要がある。例えば、下記の用法は誤りである。
Tweener.addTween(myMC, {_x:10, time:1, onStart:myFunction(), delay:1});
上記のコードを実行するとどうなるか。timeやdelayの値に関係なく即座にmyFunction
ファンクションが実行される。さらに、onStart
パラメーター(が指定されていたとして)の返り値も渡してしまう。つまり、正しく動作しない。そして、これはアクションスクリプトに意図された動作とは言えない。正しいコードは下記のようになる:
Tweener.addTween(myMC, {_x:10, time:1, onStart:myFunction, delay:1});
このようにすることで、ファンクションそのものをパラメーターとして渡すことができる。
同様の理由から、ファンクションの引数を括弧で囲んで渡すこともできない。例えば、これは動作しない:
Tweener.addTween(myMC, {_x:10, time:1, onStart:trace("I've started!"), delay:1});
これもやはり当該のファンクションが即座に実行され、パラメーター(が指定されていたとして)の返り値も渡してしまう。それは望まれる挙動ではない。ファンクションに引数を渡す正しい方法は、既に述べたとおりonStartParams
を使って次のように行う:
Tweener.addTween(myMC, {_x:10, time:1, onStart:trace, onStartParams:["I've started!"], delay:1});
言うまでもないが、意図して使う分には、トゥイーンのパラメーターとしてファンクションを直接実行することは可能である。これにより、トゥイーンのパラメーターとして、ファンクションの返り値を使うようなこともできる。例えば、次のようにしてランダムな位置をパラメーターとして取得することができる:
var getRandomPosition:Function = function(): Number { return Math.random() * 400; }; Tweener.addTween(myMC, {_x:getRandomPosition(), time:1});
onStartParams, onStartScope, onUpdate, onComplete, onOverwrite
このページの左側にメニューが表示されていない場合は、ここをクリックするとメニューを表示させることができます。