インスタンスが存在するかどうか調べる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 だったのでそうしておきました。

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
AS3習得本
AS3の全容を学習できる本。この中でどれか1冊自分に合ったものを。
Adobe Flash CS4 詳細!ActionScript3.0入門ノート ActionScript3.0 プロフェッショナルガイド 初めてのActionScript 3.0 Flashユーザーのためのステップアップガイド 詳説 ActionScript 3.0 Actionscript 3.0 Cookbook
AS3発展本
ASでアニメーションさせる面白さを知るための本。
Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編] ActionScript 3.0 アニメーション AdvancED ActionScript 3.0 Animation (Advanced)
AS2
"Flash"ではなく"ActionScript2.0"学習のための良著。他にもいろいろ読んだけど、この4冊を読んだ後、自分が成長できた感じがしました。
FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付] Essential Actionscript 2.0 Flash 8 Essentials Foundation Actionscript Animation: Making Things Move (Foundation)

あわせて読みたいブログパーツ

相互リンク

hi-posiさん
携帯Flashといえばhi-posiの岡田昇三さん。FlashLiteの有益な記事もたくさん書かれていていつもお世話になってます。ついにご挨拶させていただきました。面白すぎる人でしたw。

Return to page top