キーフレームをまたいだMovieClip [Edit]

MovieClip私は誰?
2フレームから10フレームにわたるMovieClipを、メインのタイムラインにひとつ配置します。インスタンスの名前は「mc1」とします。そして、以下のオブジェクトアクションを設定しましょう。

// MovieClipのオブジェクトアクション
onClipEvent (load) {
trace ([_parent._currentframe, this]);
}

メインのタイムラインには、スクリプト用のレイヤーをひとつ追加し、10フレームをキーフレームにしたうえで、再生ヘッドを止めるフレームアクションを設定します。

// フレーム10のフレームアクション
this.stop();

ムービープレビューを実行すると、出力ウィンドウにはつぎのように表示されます。MovieClipは、メインのタイムラインの2フレーム目で表示され、そのパスが_level0.mc1だということです。これは、当然ですね。

2,_level0.mc1

つぎに、MovieClipを配置したレイヤーの5フレーム目にキーフレームを挿入します。そして、5〜10フレーム目に配置されたMovieClipのインスタンス名を「mc2」にしてみましょう。つまり、同じインスタンスが5フレームから分かれて、その名前は2〜4フレーム目までが「mc1」、5フレーム以降は「mc2」に切り替わる訳です。ところが、ムービープレビューを実行しても、前と結果が変わりません。つまり、5フレームから別の名前のインスタンスが表示されたということが、認識されないようです。

そこで、スクリプトのレイヤーの1フレーム目に、つぎのフレームアクションを追加します。

// フレーム1のフレームアクション
this.gotoAndPlay(5);

ムービープレビューを行うと、出力ウィンドウには以下のように表示されます。今度は、メインのタイムラインの5フレーム目でMovieClipが登場したことになっています。ところが、そのインスタンスのパスは、_level0.mc1のままで変わっていません。5フレーム目からインスタンスの名前が変わっているのに、それが認識されていないということです。MovieClipは、自分の名前が何なのか、どうやらわからないらしいです。

5,_level0.mc1

MovieClipの人格移転
今度は5フレーム目以降に配置したMovieClipを、そのまま複製します。そうすると、このMovieClipは「mc2」と同じく、5〜10フレームにわたって配置されることになります。このインスタンスに「mc3」という名前をつけましょう。ムービープレビューで出力ウィンドウを確認すると、つぎのように表示されます。「mc2」は「mc1」と勘違いしたままですが、複製して配置した_level0.mc3が追加されています。

5,_level0.mc1
5,_level0.mc3

では、5フレーム目以降に配置されている「mc3」を選択して、その重ね順を最背面にしてみましょう。「mc3」は「mc2」の後ろに配置されます。この状態でムービープレビューを行うと、出力結果がつぎのように変わります。不思議なことに「mc3」が「mc1」に取って替わられ、「mc2」は我に返るのです。

5,_level0.mc1
5,_level0.mc2

MovieClipを配置した5〜10フレームに、もうひとつインスタンスを追加することにします。ライブラリを開いて、他のインスタンスと同じシンボルを、直接5フレーム目以降のステージに配置します。名前は「mc4」にしましょう。さらに、その重ね順は最背面にします。これで、「mc4」は他の2つのMovieClipのさらに後ろに配置されました。ムービープレビューの出力結果は、前と変わりません。「mc4」には、オブジェクトアクションを設定していませんので、「mc1」と誤認されているのは、相変わらず「mc3」のままです。

では、「mc4」に他のMovieClipからオブジェクトアクションをコピーしてみましょう。ムービープレビューによる出力ウィンドウの表示は、以下のようになります。ついに、「mc4」が「mc1」に取って替わられました。

5,_level0.mc1
5,_level0.mc3
5,_level0.mc2

MovieClip入れ替わりの条件
これ以上細かい実験は、省きます。さらに興味のあるマニアックな方は、いろいろ試してみてください。ここでは、筆者の行ったテスト結果から、キーフレームで区切られて名前も異なるインスタンスが、連続したひとつのMovieClipと認識される条件をまとめてみます。

第1に、同じシンボルから配置されたインスタンスが、キーフレームをまたいで連続している必要があります。レイヤーも同一でなければなりません。

第2に、どちらにも同じスクリプトが設定されている必要があるようです。一方にコメント行をひとつ入れただけでも、別個のインスタンスとして認識されます。さらに、「アクション」パネルで、一方を「ノーマルモード」、他方を「エキスパートモード」に設定しただけでも、区別されるようです。

第3に、上記2つの条件が満たされるMovieClipのうち、最背面に配置されたインスタンスから取って替わられてしまうようです。置き替えられる側ではなく、置き替わる元(2〜4フレーム)のMovieClipを複数配置した場合にも、(5フレーム目以降の)最背面から順に条件に当てはまるインスタンスを見つけて置き替わります。その順番は、細かく調べますとパブリッシュのダウンロードの順序にも関係するようです。

ただ、結論として、この現象から発生する問題を避けるもっとも確実な方法は、「フレーム間を空ける」ことでしょうね。だったら、これまでの検証は何のためだったのかということは、聞かないでください。
_____
協力者: Tatsuo Kato Ginga Baba 5MegaPixel

その他の記事