10で報告された問題です。タイムラインに置いたMovieClipインスタンスからメインタイムラインのフレームを移動すると、DisplayObject.rootやDisplayObject.stageプロパティを参照できないことがあります。メインタイムラインに2フレームをつくり、その第1フレームのみにMovieClipインスタンスを置きます(図001)。MovieClipインスタンスには、とくにビジュアルエレメントは要りません。図001■全2フレームのメインタイムライン第1フレームにMovieClipインスタンスを置くMovieClipシンボルの第1フレームに、以下のスクリプト001を記述します(図002)。DisplayObject.enterFrameイベント(定数Event.ENTER_FRAME)のリスナー関数(xTest())から、メインタイムラインのつぎのフレームに移動します。DisplayObject.rootプロパティはDisplayObjectで型指定されていますので、MovieClipクラスのプロパティやメソッドにアクセスするときはMovieClipでキャストすべきことにご注意ください(「rootプロパティでメインタイムラインの関数にアクセスできない」の「対処法」[2]「キャスト」参照)。xTest);}図002■MovieClipシンボルに第1フレームアクションを記述[ムービープレビュー]を試すと、[出力]パネルにつぎのようなランタイムエラーが表示されます。オブジェクト参照のプロパティまたはメソッドにアクセスすることはできません。原因[ヘルプ]の[DisplayObject]クラスで「rootプロパティ」の項を見ると、つぎのような説明があります。インスタンスの存在していないフレームに移動すると、そのインスタンスは親の表示リストから削除されます。その結果、上記の説明のようにDisplayObject.rootプロパティの参照がnullになっているものと考えられます。DisplayObject.stageプロパティにもつぎのような記述がありますので、その参照については同じ注意が必要です。処理の流れをできるだけ変えたくないという場合には、DisplayObject.rootプロパティへの参照を予め変数にとっておくことが考えられます(スクリプト002)[*1]。xTest);}[ムービープレビュー]を試すと、エラーは生じません。テスト用にtrace()関数を加えていますので、つぎのような[出力]が示されます。フレームの移動によりDisplayObject.rootやDisplayObject.stageプロパティがnullになり、親インスタンスの表示リストから削除されていることが確かめられます。0もっとも、自身の存在しないフレームに移動してスクリプトを実行し続けることには不安があります。そのときインスタンスからの参照がどのように変わるか明らかではないからです。9で書出すとエラーが生じないようです。インスタンスの表示リストから削除されるタイミングが変わったものと推測されます[*2]。そのタイミングはドキュメント化されている訳ではありませんので、仕様変更とみなされる余地が大きいでしょう。すると、自身の存在しないフレームへの移動は、できるかぎりスクリプトの最後に行うことが安心です(スクリプト003)。最後に親タイムラインのフレームを移動}もちろん、自身の存在しないフレームへの移動が原因ですので、移動先フレームまでインスタンスを継続して残すという対処法もあります。この問題を解消するためにタイムラインをいじるというのは、大げさでしょう。3.0におけるパフォーマンス向上のヒント」02「型指定した変数を活用する」参照)。9で書出すと、2行目の[出力]はつぎのようになります。0つまり、親インスタンスの表示リストからは削除されているものの、DisplayObject.rootやDisplayObject.stageプロパティの参照は残っているということです。10の動きの方が整合性はあると考えられます(そのため仕様が変更されたのかもしれません)。