• 締切済み

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);   }  } }

みんなの回答

回答No.1

ケース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());   }  } } こんなカンジでしょうか

John12345
質問者

お礼

H240S18B73様 ご回答いただきましてありがとう御座います。 内容を調べた所、別の原因だったようです。 取り急ぎポイント付与させていただきます。