【お題】王手、そして

いつもお世話になります。
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);
  }
 }

}

A 回答 (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());
  }
 }

}



こんなカンジでしょうか
    • good
    • 0
この回答へのお礼

H240S18B73様

ご回答いただきましてありがとう御座います。
内容を調べた所、別の原因だったようです。

取り急ぎポイント付与させていただきます。

お礼日時:2010/04/01 11:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報