2010-09-06 5 views
1

Je crée un jeu de type pacman. J'essaie de supprimer une occurrence d'un MovieClip en utilisant removeChild(). Lorsque la "case" de l'occurrence MovieClip frappe l'occurrence MovieClip "circle" --circle sera retiré de la scène.Erreur lors de l'utilisation de removeChild (AS3)

Je reçois l'erreur suivante: ArgumentError: Erreur # 2025: Le DisplayObject fourni doit être un enfant de l'appelant. à flash.display :: DisplayObjectContainer/removeChild() à Déplacer/eatCircle()

package { 
     import flash.display.Sprite; 
     import flash.display.MovieClip; 
     import flash.events.Event; 
     import flash.events.KeyboardEvent; 
     import flash.ui.Keyboard; 

     public class Move extends MovieClip { 

     var ScoreObjects:Array = new Array(); // creates ScoreObjects array 


      private var inertia:int=8; //amount of friction 

     var score_field:String; 
     //var point:MovieClip; 


    // Constructor-------------------------------------------------------------------- 
      public function Move() { 
      init(); 
      } 

    // function init ----------------------------------------------------------------- 
     function init():void { 

      //stage.frameRate=60; 
     var score_field:String=""; 

     ScoreObjects[0] = new Circle(); 
     ScoreObjects[0].amount = 1; // amount of point 
     ScoreObjects[0].name = "circle"; 


      stage.addEventListener(Event.ENTER_FRAME, frameloop); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownEvent); 
      stage.addEventListener(KeyboardEvent.KEY_UP, keyUpEvent); 

     box.addEventListener(Event.ENTER_FRAME, eatCircle); 
     wall.addEventListener(Event.ENTER_FRAME, hitWall); 

     stage.addChild(ScoreObjects[0]); // add Score Objects to stage ------------------------------ 
     trace(ScoreObjects[0]); 

     ScoreObjects[0].x = 105; 
     ScoreObjects[0].y = 233; 

      } 

    // function eatCircle -------------------------------------------------------------- 
    function eatCircle(event:Event):void { 

     if (box.hitTestObject(ScoreObjects[0])) { 
     trace ("I ate the circle"); 
     removeChild(ScoreObjects[0]); 
     //calcScore(); 
     } else { 
     trace ("I didn't eat the circle"); 
     } 
    } 



     }// end of class 
    }// end of package 

Répondre

0
if((ScoreObjects[0] as Circle)&&((ScoreObjects[0] as Circle).parent!=null)) 
{ 
    stage.removeChild(ScoreObjects[0]); 
} 
+0

j'ai pu enlever le cercle de la scène - faire stage.addChild (ScoreObjects [0]) Mais, je ne suis pas Bien sûr, je reçois toujours une erreur dans la fenêtre de sortie. ArgumentError: Erreur # 2025: le DisplayObject fourni doit être un enfant de l'appelant. à flash.display :: DisplayObjectContainer/removeChild() à Move/eatCircle() – jc70

+1

vient de mettre à jour le code, ce truc s'affiche, parce que vous n'avez pas arrêté votre envoi d'événement de la boîte, mais vous avez déjà supprimé l'objet de la scène , c'est pourquoi vous devez le vérifier comme dans mon cas de code ou un autre sera juste en supprimant le gestionnaire d'événements comme 'box.deleteEventListener (Event.ENTER_FRAME, eatCircle);' après avoir enlevé l'enfant. Alors c'est tout. Ne pas oublier d'accepter/noter la réponse/les commentaires. Bonne chance! – Eugene

2

Je n'ai pas un compilateur AS3 à portée de main pour tester, mais puisque vous avez fait stage.addChild(ScoreObjects[0]) je crois que vous devriez faire stage.removeChild(ScoreObjects[0])?

+0

Merci, j'ai pu retirer le cercle de la scène - faire stage.addChild (ScoreObjects [0]) Mais, je ne sais pas pourquoi je reçois encore une erreur dans la fenêtre de sortie. (Je sais que vous avez mentionné que vous n'avez pas de compilateur AS3, donc je ne sais pas si vous pouvez y répondre, mais merci d'avoir essayé.) ArgumentError: Erreur # 2025: Le DisplayObject fourni doit être un enfant de l'appelant. \t à flash.display :: DisplayObjectContainer/removeChild() \t à Déplacer/eatCircle() – jc70

Questions connexes