Flash CS3で_parentプロパティが使えなくなったことに今頃気づいた・・・
Flash CS3でFlash8のように、_parentで親ムービークリップを参照し制御しようと試みたが、_parentはparentに名前が変更されていた。
このparentプロパティは、正確にはflash.display.DisplayObjectクラスのプロパティで、flash.display.DisplayObjectContainer型である。そのため、Flash8のときによく書いていた、次のようなコードはコンパイルエラーになる。
parent.nextFrame();
そのときに出力されるエラーは、こんな感じ。
1061: 未定義である可能性のあるメソッド nextFrame を、静的型 flash.display:DisplayObjectContainer の参照を使用して呼び出しました。
この問題は、parentがDisplayObjectContainer型であり、クラスDisplayObjectContaierではnextFrame()は定義されていないことが原因でおこる。
nextFrame()は、flash.display.MovieClipクラスのメソッドなので、ここではparentをMovieClip型にキャストすることで問題を回避することができる。
MovieClip(parent).nextFrame();
しかし、これだと仮にparentがMovieClipでなかった場合にランタイムエラーが発生する。
そのため、厳密にはparentがMovieClipのインスタンスを参照しているかを確認してから、キャストを行うか、
もしくはas演算子を使ってMovieClipの参照を得てからメソッド呼び出しをするのが良い。
以上を踏まえると次のようなコードとなる。
var myParent:MovieClip = parent as MovieClip; if ( myParent != null ) { myParent.nextFrame(); } else { // error }