getChildByNameの謎


通常、タイムラインで配置したオブジェクトや、外部から読み込んだswfに名前をつけようとしても

Error: Error #2078: タイムラインに配置されたオブジェクトの name プロパティは修正できません。

というエラーが出て名前を変更できない。

それならば、と思ってカスタムクラスを作って、

private var _name:String;
public override function get name():String{return _name;}
public override function set name(value:String):void{_name = value;}

ってやって無理矢理名前をセットできるようにしてみましたが、これをやると、

//hogeを名前をつけられるようにしたオブジェクトとする
hoge.name = 'test';//エラーは出ない
OBJ.addChild(hoge);
trace(OBJ.getChildByName('test'));//結果はnull
trace(OBJ.getChildAt(0).name)//結果はtest

という謎の状態になってしまいました。

カスタムクラスのsetterで

super.name = value;

とするとやはりエラーが出るので、setterのnameは上のような動作ではなく、違う動作をすると思われます。何か内部的なIDを割り振っているんでしょうか。あるいは子の名前のリストを内部的に持っているとか?

別の方法で何とかしましたが、思いつきだけで動かしていると痛い目に遭いますね・・・。

余談:

既にunloadしているMovieClipをもう1度unloadしようとすると、エラーになる。

自分でunloadを仕込んだのに忘れてunloadしようとしたら

Error #2099: 読み込み中のオブジェクトは、十分に読み込まれていないので、その情報を表示することができません。

というエラーが。loaderが取得できないのかと思ったら、そもそもその前に削除していたという・・・。まあ確かにloaderが取得できない、という想像は正しいですがw

コメントを残す

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