2010-05-10 4 views
3

Je suis un débutant, et j'ai essayé et essayé pendant des semaines à ce sujet, et je n'arrive pas à comprendre. Le code simple ci-dessous donne l'erreur "Le DisplayObject fourni doit être un enfant de l'appelant".Le DisplayObject fourni doit être un enfant de l'appelant

var square = new squareObj; 
addChild(square); 
addEventListener(Event.ENTER_FRAME, removeSquare); 

function removeSquare(evt:Event):void { 
    removeChild(square) 
} 

squareObj est un MovieClip dans la bibliothèque qui est exporté pour AS. Comment ce code peut-il être modifié pour le faire fonctionner correctement? Je suppose que c'est ma connaissance sur le bon fonctionnement, je suis en manque de, donc tous les liens vers de bons tutoriels sur le sujet sont appréciés.

Cordialement H

Répondre

6

Le problème est que l'auditeur de saisir cadre sera appelé encore et encore. La première fois que cela s'appelle DisplayObject sera en effet un enfant de l'appelant, mais après cela, il ne le sera pas (puisqu'il a déjà été supprimé).

Je vous suggère de faire:

var square = new squareObj; 
addChild(square); 
addEventListener(Event.ENTER_FRAME, removeSquare); 

function removeSquare(evt:Event):void { 
    if (contains(square)) { 
     removeChild(square) 
    } 
} 

soit vérifier si la place est en effet un enfant de this

var square = new squareObj; 
addChild(square); 
addEventListener(Event.ENTER_FRAME, removeSquare); 

function removeSquare(evt:Event):void { 
    removeEventListener(Event.ENTER_FRAME, removeSquare) 
    removeChild(square) 
} 

ou supprimer l'écouteur d'événement, selon que vous devez ou non l'événement pour autre chose que de supprimer le carré. Notez également que vous ne verrez probablement pas le carré car il sera supprimé rapidement après son ajout.

Questions connexes