ActionScript 3.0 (以下、 AS3)で、親 MC に設定したラベルを使って場面を移動したりするときのお話。
「_parent」は AS2 の書き方なので「parent」と書くのは前提として(←でも一応載せておく)、ついやっちゃうのはこういう↓書き方。
addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(evt:MouseEvent):void {
parent.gotoAndPlay("labelname");
}
一見間違いなさそうですが、このまま実行しようとすると
1061:未定義である可能性のあるメソッド gotoAndPlay を、静的型 flash.display:DisplayObjectContainer の参照を使用して呼び出しました。
みたいな感じで怒られます(Flash の「コンパイルエラーパネル」に表示)。
ひょっとしたら微妙に文章は違っているかも知れませんが、内容はだいたい同じだと思います。
どういうことかというと、「parent は DisplayObject クラスのプロパティなので、gotoAndPlay メソッドは使えねぇよ」ということみたいです。
すいません。僕も具体的なことはよく分かりません。
簡潔に説明してくれているページがあるので、詳しくはそちら↓を参照してください。
「ActionScript 2.0からの移行」によれば、_parentはflash.display.DisplayObject.parentに変わったことがわかります。そして、DisplayObject.parentは、DisplayObjectクラスのプロパティです。そのため、MovieClipクラスのプロパティ・メソッドにアクセスするには、ニノミヤ カズノリさんご指摘のように、MovieClipにキャストする必要があります。
»mcから_parent.gotoAndPlayができない[FLASH-JP.COM - フォーラム]
というワケで、結論を言っちゃうと「parent を MovieClip として扱うように設定(キャスト変換というらしい)」すれば大丈夫です。
修正後のスクリプトは以下↓の通り(赤字が修正部分)。
addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(evt:MouseEvent):void {
MovieClip(parent).gotoAndPlay("labelname");
}
もぅ、クラスやらキャストやら、AS3 はややこしいですね〜。
でも AS2 よりスクリプト自体は何となくすっきりしたような気がしないでもないような気もするので、ま、めげずに頑張りましょう。