ひととおりアニメーション作成 してみて、「モーショントゥイーンべんりー」とか喜んでいたのだが、「始点と終点のオブジェクトって同じモノなの?」とか疑問が湧いてきたので、実験してみた。あ、えーと、AS2.0で記述。
たとえば、1フレーム目に「丸」オブジェクトを置いて、10フレーム目にキーフレームを挿入する。なんとなくコピーされたように見えるが、10フレーム目の「丸」オブジェクトは移動してプロパティ値が変わったとしても、同じオブジェクトのようである。これは以下のようにして確認できる。
1フレーム目の「丸」オブジェクトに the_circle というインスタンス名をつける。そして、1フレーム目のフレームアクションに
function trace_the_circle() { var object_path:String = the_circle ? the_circle : 'undefined'; trace(_currentframe+': '+object_path); } trace_the_circle();
10フレーム目のフレームアクションに
trace_the_circle();
と記述して、再生させると「出力」に
1: _level0.the_circle 10: _level0.the_circle
と、10フレーム目のオブジェクトにはインスタンス名が(編集画面上は)ないにもかかわらず、同じオブジェクトのようである。
しかし、20フレーム目に空白キーフレームを挿入し、オブジェクトがないフレーム列を挿入すると、30フレーム目に「丸」オブジェクトを復活させたとしても、これは違うオブジェクトのようである。
1: _level0.the_circle 10: _level0.the_circle 20: undefined 30: undefined 40: undefined
なお、10フレーム目の「丸」オブジェクトに別のインスタンス名(たとえば、the_circle_2)をつければ、オブジェクトの同一性は失われるようである。
結論: Flash はオブジェクトをなんとなくインテリジェントに処理するらしい。
でも、分かりにくいので、シンプルな仕様にしてほしい。
おまけ
- _level0はトップレベルのタイムラインを表す。SWFが1つロードされているとき、_rootは_level0を指す
(参考 Differences between _root and _level0) - _currentframe は現在再生中のフレーム番号
- 単純に trace(_currentframe+': '+the_circle) とすると the_circle=='undefined' のとき何も出力されないみたい