2016-10-08 2 views
2

벽을 파괴하고 파괴하기 전에 떨어지는 폭탄을 클릭해야하는 AS3 게임을 만들었습니다. 이제, 벽이 파괴되었을 때 쓰러진 폭탄을 제거하려고합니다. 따라서이 폭탄이 무덤에 addChild(blob)으로 추가 되었기 때문에 게임에서 내 게임에서 removeChild(blob)을 수행했는데이 오류가 계속 나타납니다 :AS3 오류 2025 removechild

this.parent.removeChild(this); 

또는

blob.parent.removeChild(blob); 

또는

012 :

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

... 그리고는 그런데, 나는 이미 이런 일을 시도했습니다

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)와 같은 말을 할 수 있습니다. blob

+0

나는 당신이 뭔가있는 것 같아. –

+2

대신에 blob을 생성 할 때 blob을 배열에 넣은 다음 해당 배열을 반복하면 변수 참조 대신 인덱스 번호로 각 배열을 삭제할 수 있습니다. –