インスタンスが存在するかどうか調べるAS3

インスタンスが、表示リストに存在しているかどうかは、getChildByName()メソッドを使って判定することができます。(via FlashゲームPG講座 for AS3.0)(contains を使った判定方法もこの類かと)

それとは違い、インスタンスを作ったかどうかを判定したい時がありましたよ!というのが今回のテーマ。

あるクラス内で、new して”mc1″というインスタンスを生成したとする。でも”mc2″は生成せず、”mc3″は生成する。mc1と3はインスタンス生成はしたものの addChild はしていない状態。
インスタンス名の数字の部分をint型の変数を使ってハンドリングしようとした時、

if(this["mc"+num]){
    addChild(this["mc"+num])
    //なんか処理
}

で、変数numをカウントアップしていって・・みたいなコード書くと、1と3の時は動くけれど、2の時にリファレンスエラー
ReferenceError: Error #1069: Property mc2 not found on Main(※クラス名) and there is no default value.
になっちゃう。エラーは困る。幸い1と3の時は正常に動いているので、try,catchを使って

try{
    if(this["mc"+num]){
        addChild(this["mc"+num])
        //なんか処理
    }
}catch(e:Object){
    trace("エラーは無視するぜ");
}

という感じでエラーだけ無視して難を逃れましたと。e の type は trace(typeof e) で Object だったのでそうしておきました。

このエントリーをはてなブックマークに追加
はてなブックマーク - インスタンスが存在するかどうか調べるAS3

Comments:3

正宗 10-03-20 (土) 16:52

こんにちは。
僕もとりあえず存在確認が面倒なときとか、try~catchでエラーを無視するように書いてます。
その際、ぼくはcatch(e:Error)と書いてます。のちのちにエラーによって分岐したい場面が出てきたとき、こっちのほうがいいかなあと。
まだそんな丁寧なことする場面に出くわしてないですが><

kaminaly 10-03-23 (火) 20:22

ダイナミッククラスってことですよね?

trace(hasOwnProperty(this["test"]));
this["test"] = “test”;
trace(hasOwnProperty(this["test"]));

こちらでどうでしょう?

kaminaly 10-03-23 (火) 23:29

間違えた!

trace(hasOwnProperty(“test”));
this["test"] = “test”;
trace(hasOwnProperty(“test”));

ですね(汗

Comment Form
Remember personal info

Return to page top