btmup Blog

Web 制作のことを中心に、ちょっとした Tips などを掲載しています。「自分用メモ」が基本スタンス。

ActionScript

ActionScript 3.0 で parent を指定したときにコンパイルエラーが発生する件。

投稿日:

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 よりスクリプト自体は何となくすっきりしたような気がしないでもないような気もするので、ま、めげずに頑張りましょう。







-ActionScript
-, , , , , ,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

ActionScript 3.0 で Javascript を呼び出してウィンドウを閉じる方法。

ググっても情報がなぜか少ないので、とりあえずメモ的にアップ。 window.open() なんかで開いたサブウィンドウを、テキストリンクやボタンで閉じるための方法です。 HTML でウィンドウを閉じる …

no image

外部テキストファイルを読み込んだときにスクロールバー[UIScrollBar]が反応しない(Desabled状態になる)件とその解決法。

目下「ActionScript 3.0 を頑張って覚えようキャンペーン」を開催中なのですが、さっそくつまづいたのでメモ。 外部ファイルのテキストを読み込んで、テキストフィールド(TextField)に …

no image

ActionScriptとモーショントゥイーンとの関係について

フレームにActionScriptを記述している場合、ターゲットのムービークリップにモーショントゥイーンを設定してたら効かないっぽい。 ということに今日気付きました。 今までにもエラーはないのに何故か …