2010-07-11 3 views

Répondre

3

Oui, vous pouvez. Le problème est que DisplayObjectContainer.getChildByName() renvoie le type DisplayObject et un objet d'affichage arbitraire peut être ou non un DisplayObjectContainer. Ainsi, alors que vous pouvez le faire, vous devez d'abord jeter le type du résultat à un DisplayObjectContainer:

public static function getGrandChildByName(
     parent : DisplayObjectContainer, 
     child : String, 
     grandchild : String 
) : DisplayObject { 
    var child_obj : DisplayObject = parent.getChildByName(child); 
    var child_container : DisplayObjectContainer = child_obj as DisplayObjectContainer; 
    return child_container.getChildByName(grandchild); 
} 

Notez que dans l'exemple que j'ai donné ci-dessus, je ne fais pas de vérification pour vérifier que l'enfant existe réellement et est un DisplayObjectContainer .... dans le code de production réel, vous pouvez ajouter de telles vérifications.

En outre, une dernière note, si vous utilisez le type MovieClip, vous pouvez simplement se référer à l'objet par son nom:

myclip.mc_child.mc_grandchild.gotoAndStop(3); 

simplement se référant aux éléments par nom est plus simple et moins sujette aux erreurs. Je le recommande fortement.

+0

+1 pour le formatage des paramètres funky. lol – gMale

+0

@gmale, que voulez-vous dire? –

+0

juste être bête. Chacun de vos paramètres de fonction est sur leur propre ligne. Cela, combiné avec l'espace autour du ":" donne les signatures de la fonction "pizzazz!" +1 pour le pizzazz. – gMale

3

Même si je suis sûr que la réponse de Michael Aaron peut être utile ... quand je dois faire référence à un ou deux articles, je le fais de cette façon:

trace(MovieClip(MovieClip(_view.getChildByName("name")).getChildByName("name2")).name); 

Ceci est fondamentalement juste exerce des pressions sur l'objet d'affichage en agissant comme un MovieClip afin que je puisse lire sa propriété de nom et utiliser l'une des méthodes MoveClip dessus.

Si vous avez besoin de faire référence à un affichage complet des éléments, quelque chose de plus complexe pourrait être dans l'ordre ....

Vous pouvez également l'utiliser pour accéder difficiles à atteindre TextFields .... trace (TextField (MovieClip (_view.getChildByName ("name")) .getChildByName ("textfieldName")) .text);

-1
var parentMc1:Object=this.parent.getChildByName('myMc1') as Object; 
var parentInMc2:Object=parentMc1.getChildByName('myMc2') as Object; 

//parent.myMc1.myMc2.gotoAndStop(2); // WRONG 
parentInMc2.gotoAndStop(2); // TRUE 
_______________ 
var parentMc2.. 
var parentMc3.. 
var parentMc4.. 
. 
. 
. 
Limitless mc using 
Questions connexes