2010-11-16 23 views
3

Comment accéder à tous les enfants d'un DisplayObject en utilisant du code? (Je cherche quelque chose comme movieclip.children)Comment accéder à tous les enfants d'un DisplayObject par programme?

J'utilise ceci dans deux cas:

1) boucle à travers et repositionner tous les enfants d'un MovieClip englobante.

Ou

2) Pour passer en boucle et supprimer tous les enfants d'un MovieClip

En outre, ce projet est un Flash CS5.

Répondre

6

Cette boucle touchera tous les enfants dans movieclip foo. Je ne suis pas sûr de ce que vous allez leur faire, mais vous pouvez exécuter toutes les méthodes dont vous avez besoin dans la boucle.

for (var i:uint=0; i<foo.numChildren;i++){ 
    foo.getChildAt(i).whateverMethodYouNeed(); 
} 
+0

Notez qu'il existe aucun accesseur de type tableau comme 'children [n]'. Vous utilisez toujours les méthodes 'get' pour accéder aux enfants un par un. – fenomas

+0

Mauvaise réponse pour deux raisons: la boucle est plus lente que var i: int = numChildren; while (i--> 0) getChildAt (i), DisplayObject n'a pas de méthode "whateverMethodYouNeed" –

0

Votre objet est-il simplement un objet d'affichage? S'il s'agit d'un composant UIComponent, vous pouvez utiliser getChildAt() et getChildByName() avec la propriété numChildren pour les faire défiler. Cela fait-il partie d'un projet flexible ou d'un projet d'actionScript seulement?

Un objet DisplayObject lui-même ne dispose pas des mécanismes permettant de décrire ses enfants. Le type de niveau le plus bas qui connaît les enfants est DisplayObjectContainer. Vous devrez peut-être convertir l'objet en au moins un DisplayObjectContainer pour pouvoir faire ce que vous voulez. J'irais avec un UIComponent cependant si vous avez le cadre flexible pour travailler avec.

DisplayObject

DisplayObjectContainer

UIComponent

0

Si vous avez besoin d'accéder à tous les enfants, y compris d'enfants d'un enfant, vous pouvez essayer ceci:

function doWhatever(mc:DisplayOjectContainer):void 
    { 
      if(mc.numChildren > 0) 
      for(var i:int ; i < mc.numChildren ; ++i) 
      { 
       //if you need to reposition 
       //set the points properties here 
       var point:Point = new Point(_x , _y); 
       setPosition (mc.getChildAt(i) , point); 

       //if you need to remove all children 
       //do it recursively 
       //remove(mc , mc.getChildAt(i); 
      } 
    } 

    function setPosition(mc:DisplayObject , point:Point):void 
    { 
     mc.x = point.x ; 
     mc.y = point.y; 
    } 

    function remove(container:DisplayObjectContainer , child:DisplayObject):void 
    { 
     //this will remove all children before being removed 
     if(child is DisplayObjectContainer) 
     { 
      var doc:DisplayObjectContainer = child as DisplayObjectContainer; 
      doWhatever(doc); 
     } 

     container.removeChild(child); 
     child = null; 
    }