2010-07-27 3 views
0

Je rencontre le message d'erreur suivant chaque fois que je compile mon projet dans Adobe Flash CS4:ActionScript 3.0 Erreur d'argument: 2025 (Retirer Problem Child)

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. 
    at flash.display::DisplayObjectContainer/removeChild() 
    at stageRotation/spawnParticle() 
    at flash.utils::Timer/_timerDispatch() 
    at flash.utils::Timer/tick() 

le code qui génère l'erreur est indiqué ci-dessous:

for (var i:int = 0; i < particleArrayForward.length; i++) { 
    if (particleArrayForward[i] != null) { 
     trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]); 
     this.removeChild(particleArrayForward[i]); 
    } 
} 

Toute entrée appréciée. Merci. :)

Répondre

2

removeChild renvoie cette erreur lorsque l'argument transmis n'est pas un enfant du parent qui a appelé la méthode. Les particules sont-elles ajoutées en tant qu'enfant à un autre sous-conteneur au sein de l'objet this?

Assurez-vous qu'il est en effet un enfant de l'appelant:

for (var i:int = 0; i < particleArrayForward.length; i++) { 
    if (particleArrayForward[i] != null && particleArrayForward[i].parent == this) { 
     trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]); 
     this.removeChild(particleArrayForward[i]); 
    } 
} 

Si les particules ne sont pas des enfants directes d'this, vous pouvez les supprimer à l'aide:

for (var i:int = 0; i < particleArrayForward.length; i++) { 
    if (particleArrayForward[i] != null && particleArrayForward[i].parent != null) { 
     trace("particle at " + i + " " + particleArrayForward[i]); 
     trace("parent is " + particleArrayForward[i].parent); 
     particleArrayForward[i].parent.removeChild(particleArrayForward[i]); 
    } 
} 
+0

grâce à cela. ça a marché! – Smiley

1

Vous supprimez un enfant de l'objet d'affichage en faisant défiler toutes les particules du tableau. Cependant, je ne vois pas où vous supprimez la référence à l'enfant dans le tableau lui-même. Donc, si vous parcourez à nouveau particleArrayFoward, vous essaierez de supprimer un objet d'affichage qui a déjà été supprimé, ce que je vais supposer qu'il se passe?

for (var i:int = 0; i < particleArrayForward.length; i++) { 
    if (particleArrayForward[i] != null) { 
     trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]); 
     this.removeChild(particleArrayForward[i]); 
     particleArrayForward[i]=null;//this will fix it but now the length of array will never shrink 

    } 
} 

donc mieux encore:

for (var i:int = 0; i < particleArrayForward.length; i++) { 
    if (particleArrayForward[i] != null) { 
     trace("particleArrayForward[" + i + "]:" + particleArrayForward[i]); 
     this.removeChild(particleArrayForward[i]); 
    } 
} 
particleArrayForward = new Array(); 
//or particleArrayForward.length = 0; 

sinon, si vous n'êtes pas Boucler dans ce tableau à nouveau, alors vous êtes quelque part ajouterez un enfant au tableau qui n'est pas un enfant de l'objet d'affichage dont vous essayons d'enlever de.