- 締切済み
addChildとremoveChildの処理についてご教授ください
いつもお世話になります。 ActionScript3でサイト制作を行なっています。 初歩的な質問で大変恐縮ですが、addChildとremoveChildの処理に関するご質問です。 予め「a_mc」、「b_mc」、「bg_mc」というムービークリップを作成し、それぞれをリンケージしておきます。 1.ENTER_FRAME内の条件Aの中で「bg_mc」上に「a_mc」をaddChildします。 2.条件Bにあるhoge関数の中で「bg_mc」上に「b_mc」をaddChildします。 3.「a_mc」は不要なのでremoveChildしたいのですが、下記のエラーが出てしまいます。 【ArgumentError: Error #2025: 指定した DisplayObject は呼び出し元の子でなければなりません。】 上記のエラーの原因がよく理解できなかたので、色々試してみましたが、 例えば、条件Aの中でステージ上にaddChildしたオブジェクト「this.addChild(c)」は、 条件Bのhogeの中でremoveChildすることができました。 上記の3の処理ができない原因は何でしょうか? また、上記の処理を実現するにはどのような処理方法が適切でしょうか? 是非ご教授ください。 宜しくお願い申し上げます。 // 背景MC var bg:MovieClip = new bg_mc(); // コンテンツMC var a:MovieClip; var b:MovieClip; this.addEventListener(Event.ENTER_FRAME, visibleCheck); function visibleCheck(eventObject:Event):void { if(条件A) { a = new a_mc(); bg.addChild(a); } else if (条件B) { hoge(); function hoge():void { b = new b_mc(); bg.addChild(b); bg.removeChild(a); } } }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- H240S18B73
- ベストアンサー率65% (190/288)
ケース1: 条件Aで一度も実行されないのに条件Bが実行されている aには何も入っていないのでエラーになる ケース2: 条件Bで複数回実行されている aはすでに一回目の条件Bでの実行で removeChildされているのでエラーになる 対処 bg.removeChild(a) ↓ try{bg.removeChild(a)}catch(e){} ケース3: 条件Aで複数回実行されたのち条件Bでも複数回実行されている 最後にaddChildしたa_mc以外は変数aでの参照が切れているので 変数aの参照ではremoveChildできない 対処 a_mcのインスタンスへの参照は配列にしておくなりしておき 複数のa_mcのインスタンスを全部参照できるようにしておく // 背景MC var bg:MovieClip = new bg_mc(); // コンテンツMC var a_arr:Array; var b:MovieClip; this.addEventListener(Event.ENTER_FRAME, visibleCheck); function visibleCheck(eventObject:Event):void { if(条件A) { a_arr.unshift(new a_mc()); bg.addChild(a_arr[0]); } else if (条件B) { hoge(); function hoge():void { b = new b_mc(); bg.addChild(b); while(a_arr.length>0)bg.removeChild(a_arr.pop()); } } } こんなカンジでしょうか
お礼
H240S18B73様 ご回答いただきましてありがとう御座います。 内容を調べた所、別の原因だったようです。 取り急ぎポイント付与させていただきます。