2016-10-08 14 views
2

AS3でゲームを作って、壁を爆破して破壊する前に落下爆弾をクリックする必要があります。さて、私は壁が破壊されたときに落ちた爆弾を取り除こうとしているので、これらの爆弾はaddChild(blob)でステージに追加されているので、私はゲームオーバーでremoveChild(blob)をやりました。このエラーが続いています。AS3エラー2025 removechild

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. ...line 80

...ところで、私はすでに、これらのようなもの試してみた:

this.parent.removeChild(this); 

または

blob.parent.removeChild(blob); 

または

stage.removeChild(blob); 

でも、同じエラーが表示されます。

package cem { 

    import flash.geom.*; 
    import flash.display.*; 
    import flash.events.*; 
    import flash.display.MovieClip; 
    import flash.utils.Timer; 



    public class Jeu extends MovieClip { 

     //Variables publiques 
     var decor: MovieClip = new Decor(); 
     var chrono: cem.Chronometre; 
     var nextObject: Timer = new Timer(800, 0); 
     var _menu: MovieClip = new Menu(); 
     var _btnJouer: MovieClip = new BoutonJouer(); 
     var blob: cem.Blob; 
     var score: Score; 

     public function Jeu() { 
      // constructor code 

      //***********************************************Mettre menu***********************************************// 
      addChild(_menu); 

      addChild(_btnJouer); 
      _btnJouer.x = 500; 
      _btnJouer.y = 500; 
      _btnJouer.addEventListener(MouseEvent.CLICK, jouer); 
     } 



     //*****************************************************Jouer**************************************************// 
     function jouer(e: MouseEvent) { 

      removeChild(_menu); 

      addChild(decor); 
      decor.gotoAndStop(1); 

      chrono = new cem.Chronometre(); 
      addChild(chrono); 
      chrono.demarrer(); 
      score = new Score(); 
      score.x = 600; 


      nextObject.addEventListener(TimerEvent.TIMER, creerBlobs); 
      nextObject.start(); 



     } 

     //**************************************************Créer Bombes***********************************************// 
     function creerBlobs(e: TimerEvent) { 
      blob = new cem.Blob(); 
      blob.x = Math.floor(Math.random() * (stage.stageWidth - blob.width)); 
      addChild(blob); 
      blob.gotoAndStop(1); 
      blob.addEventListener("explosion", perdreVies); 
     } 

     //************************************************Perdre des vies*********************************************// 
     public function perdreVies(e: Event) { 
      decor.moinsVie(); 
      decor.addEventListener("gameisover", _gameOver); 
     } 

     //************************************************Partie terminée*********************************************// 
     public function _gameOver(e: Event) { 




      blob.removeEventListener("explosion", perdreVies); 


      removeChild(blob); 


      chrono.arret(); 
      addChild(_menu); 
      addChild(_btnJouer); 

      nextObject.stop(); 
      nextObject.removeEventListener(TimerEvent.TIMER, creerBlobs); 
      nextObject.removeEventListener(TimerEvent.TIMER, creerBlobs); 


      addChild(score); 
      score.affichageScore.text = "votre score: " + chrono.secondes * 1000; 
     } 


    } 
} 

答えて

2

VAR名ブロブは一度に一つの特定のBlobオブジェクトを参照することができます。

は、ここに私のコードです。 新しいBLOBを作成するたびに、最後に作成したBLOBに名前BLOBを再割り当てし、前のBLOBへの参照を失います。

このエラーは、removeChildを呼び出すときに、名前「blob」に割り当てられた特定のBlobが子ではなく、表示リストにないことを示しています。

そのため、誤ったBlobを参照しているか、または既に表示リストから削除されています。

エラーを避けるために、if(blob.parent)のようなものを言うこともできます。

+0

あなたは何かをしていると思います。 –

+2

代わりに、それらを作成するときにblobを配列に入れ、その配列をループして、可変参照の代わりにインデックス番号でそれぞれを破棄します。 –

関連する問題