[AS]動的に追加したオブジェクトは、インスタンス名(nameプロパティ)を使ってアクセスすることはできない?→できます。
できそうでできなかったのでメモ。
※2009/9/25/21:43追記 できました→下に追記があります。
前提として、ステージ上にMcを配置し、そのインスタンス名はmc
mcの中には2個Mcが配置してあり、それぞれ、mc1、mc2とインスタンス名を設定
//メインのタイムラインのフレームアクション trace(mc["mc"+1]);//出力:[object MovieClip] trace(mc["mc"+2]);//出力:[object MovieClip] //動的にspriteを作って、ステージ上のmcに配置 var sp1 = new Sprite(); sp1.name = "sprite1"; mc.addChild(sp1); trace(this.mc["sprite1"]); //出力:underfined //動的にspriteを作って、ステージに配置 var sp2 = new Sprite(); sp2.name = "sprite2"; addChild(sp2); trace(this["sprite2"]); //出力:underfined //配列につっこむ var array = []; array.push(sp1); trace(array[0]);//出力:[object Sprite]
動的に設定したSpriteはnameプロパティを設定しても、それを使ってアクセスってできないのかな?
とりあえず配列つっこんで保持しておけばそこから呼び出すことはできるけど。
気分的には配列作るのにちょっと抵抗あり。
うーん。
※2009/9/25/21:43 追記
コメント欄にて教えていただきました。
以下のようにすればアクセス可能。
var sp1 = new Sprite(); mc.addChild(sp1) sp1.name = "sprite1"; mc["sprite1"] = sp1 trace(this.mc["sprite1"].name); //出力:sprite1
ついでにもう一点。
「as3 name インスタンス名」でググッてみたらF-siteにて野中さんの詳しい解説もありました。
[AS3] MovieClipインスタンスとインスタンス名
これによるとDisplayObjectContainer.getChildByName(String)を使う手段もあり。
var sp1 = new Sprite(); mc.addChild(sp1); sp1.name = "sprite1"; trace(mc.getChildByName(sp1.name).name); //出力:sprite1
Tweet
2 Comments
通りすがりさん
コメントありがとうございます!
なるほど、動的に作ったインスタンスのnameプロパティでアクセスする場合には、インスタンスをそれ自身に参照させてあげればOKということですね。
勉強になりました!!