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
}