« Flash でアニメーション作成 ひととおり | メイン | 天然パーマ »

Flash: タイムライン上のオブジェクトの同一性について

あとで読む
flash_object_on_timeline.png

ひととおりアニメーション作成 してみて、「モーショントゥイーンべんりー」とか喜んでいたのだが、「始点と終点のオブジェクトって同じモノなの?」とか疑問が湧いてきたので、実験してみた。あ、えーと、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' のとき何も出力されないみたい

Trackbacks

Trackback URL:
http://groundwalker.com/mt/gwtb.cgi/327

« Flash でアニメーション作成 ひととおり | メイン | 天然パーマ »

スポンサー

関連ブログ

あわせて読みたい

関連キーワード

Powered by
Movable Type 3.34

連絡先