2012-05-04 3 views
0

Ainsi, im en utilisant ce code pour supprimer quelques clips de mon étape:problèmes pour obtenir des objets à l'étape

for (var i:uint = 0; i < this.numChildren; i++) 
{ 
    if (this.getChildAt(i) is MovieClip 
     && pecasInGame.indexOf(this.getChildAt(i)) >= 0) 
    { 
     removeChild(this.getChildAt(i)); 
    } 
} 

Mais son travail pas vraiment bien ... J'ai 5 clips pour enlever et ils sont tous ajoutés dinamiquement, quand ces MovieClips sont ajoutés je l'insère ensuite dans ce tableau "pecasInGame", et quand il y a cinq de puis j'essaie de supprimer en utilisant la boucle ci-dessus.

Le problème est, il enlève seulement 3 des objets 0, 2 et 4 .. Les 1 et 3 arent même énumérés dans la boucle. Une idée pourquoi cela arriverait-il ??

Répondre

2

vous supprimez les objets d'affichage, de sorte que les indices changent pendant que votre boucle continue. changer cette façon:

for (var i:uint = this.numChildren-1; i >= 0 ; i--) 
{ 
    if (this.getChildAt(i) is MovieClip && pecasInGame.indexOf(this.getChildAt(i)) >= 0) 
    { 
     removeChild(this.getChildAt(i)); 
    } 
} 

Autres options: utilisez votre tableau pour enlever les objets, comme celui-ci

for (var i:int=0; i<pecasInGames.length; i++) { 
    removeChild (pecasInGames[i]); 
} 
+0

Je t'aime homme! Merci beaucoup! C'était tellement évident im honteux en ce moment lol –

1

Le problème est que vous itérez sur les enfants et que vous supprimez en même temps, donc les indices des enfants changent, ce qui cause le problème.

Si vous voulez supprimer tous les clips de la liste d'affichage, faire quelque chose comme ceci:

for each(var mc:MovieClip in pecasInGame) 
{ 
    if(getChildIndex(mc) != -1) 
     removeChild(mc); 
} 
Questions connexes