2010-11-04 14 views
0

J'essaie de supprimer un tas de choses différentes de la scène en même temps. J'ai 3 champs de texte créés dynamiquement et 2 clips vidéo créés dynamiquement. Je les ai ajoutés à la scène dans ma classe de document acheter les créer, éditer leurs propriétés, puis ...Comment puis-je supprimer un tas de choses créées dynamiquement de la scène?

addChild(myText1); 
addChild(myText2); 
addChild(myText3); 
addChild(myMovieClip1); 
addChild(myMovieClip2); 

Je veux les supprimer et je l'ai essayé ...

removeChild(myText1); 

ETC

Mais cela ne fonctionne pas. quelqu'un peut-il m'aider.

Répondre

2

Si vous souhaitez supprimer tout de l'objet courant, vous pouvez faire:

while (numChildren > 0) removeChildAt(0); 

Si vos DisplayObjects sont sur la scène, vous pouvez faire:

stage.removeChild(myText1); 
+0

Il n'est pas dans un objet cependant, il est juste sur la scène. Il y a aussi d'autres choses sur la scène, donc je ne veux pas que tout soit enlevé, juste les 3 champs de texte et les 2 MovieClips. –

+0

Édité ma réponse. Si cela ne fonctionne toujours pas, veuillez expliquer: Avez-vous une exception? Cela ne fait rien? – blue112

+0

Je pense que mon problème est que je ne peux pas supprimer les enfants car ils sont dans une fonction séparée et non une variable globale, par conséquent je ne peux pas y accéder à partir de ma méthode séparée parce que je ne peux pas les réciter. Mais il doit y avoir un moyen d'y accéder s'ils sont sur scène, alors je suppose que j'essaie de savoir comment les retirer de la scène. J'ai juste essayé stage.removeChild (myText1); Mais je reçois toujours l'accès à la propriété undefined myText1. –

1

Si vous voulez seulement être en mesure de supprimer ces objets spécifiques, alors vous aurez besoin de stocker des références à quelque part.

Une autre solution serait de remplir la propriété .name de chaque objet lors de sa création, et ensuite utiliser ce nom à une date ultérieure pour prendre une référence à l'objet:

var __dynamicMovieClip:MovieClip = new MovieClip(); 
__dynamicMovieClip.name = "foo"; 

addChild(__dynamicMovieClip); 

Et puis à quelque temps plus tard:

removeChild(getChildByName("foo")); 

getChildByName porte un peu de frais généraux, donc il est vraiment pas une bonne idée de l'appeler à plusieurs reprises, ou dans une situation où la liste d'affichage actuel est complexe/profonde

+0

Merci tas, je pense que je pourrais avoir juste à les stocker dans une variable globale. –

1

Vous devez avoir des variables membres pour chacun des objets créés dynamiquement afin de pouvoir les référencer en dehors de la fonction que vous avez utilisée pour les créer. Si vous avez seulement besoin d'une référence pour les retirer de la scène, un tableau fonctionnera très bien.

private var objectsToDelete : Array = []; 

private function someFunction () : void 
{ 
    objectsToDelete.push(myText1); 
    objectsToDelete.push(myText2); 
    objectsToDelete.push(myText3); 
    objectsToDelete.push(myMovieClip1); 
    objectsToDelete.push(myMovieClip2); 
} 

private function removeObjects() : void 
{ 
    var i : int = 0; 
    var max : int = objectsToDelete.length; 
    for (i; i < max; i++) 
    { 
     removeChild(objectsToDelete[ i ]); 
    } 
} 
+0

merci, cela fonctionne. –