Flash IDE 環境でオーサリング時にタイムラインに配置した MovieClip インスタンスに[プロパティインスペクタ]でインスタンス名を設定した場合、インスタンス名をそのまま変数のように参照として扱うことができます。
これは、Flashがインスタンス名と同じ名前で変数を宣言し、そこにインスタンスの参照を格納する仕組みになっているからです。
しかし、スクリプトで動的に配置したMovieClipインスタンスに DisplayObject.name プロパティでインスタンス名を設定した場合、そのインスタンス名を参照してインスタンスの操作ができません。
DisplayObject.name プロパティで設定されたインスタンス名は単なる文字列だからです。
下記の例のように DisplayObject.name プロパティにその文字列を設定し、その名前を使ってインスタンス操作するとエラーになります。
var mc:MovieClip = new MovieClip(); addChild (mc); mc.name = "myName"; trace (mc.name); myName.x = 0;
**Error** シーン 1, レイヤー 'レイヤー 1', フレーム 1、行 5: 1120: 未定義のプロパティ myName へのアクセスです。
myName.x = 0;
動的に生成したインスタンスを生成するときは、上記のサンプルスクリプトように参照を保つために変数に格納します。 ActionScript3.0 では、その変数を参照して、インスタンスのコントロールするのが一般的です。
しかし、インスタンスの名前からインスタンスを参照する必要がある場合あります。
DisplayObjectContainer.getChildByName メソッドにより文字列から参照を取得することができます。
var mc:MovieClip = new MovieClip();
addChild (mc);
mc.name = "myName";
var target_mc:MovieClip = MovieClip(getChildByName("myName"));
trace (target_mc.name);
target_mc.x = 0;
DisplayObjectContainer.getChildByName メソッドの戻り値が DisplayObject ですので取得した参照を MovieClip インスタンスとして、そのプロパティやメソッドにアクセスするためには、MovieClip にキャストしなければなりません。
「キャスト」とは、型の不一致によってコンパイル時にエラーを生成させたくない場合意図的に行う型変換のことです。
異なるデータ型にキャストするには、インスタンス名を括弧で囲み、その前に変換したいデータ型の名前(クラス名)の後に括弧で囲んだ変数を続けます。
クラス( 変数 )
Post your comment