Traversée de la liste d'affichage

Comme nous l'avons vu, la liste d'affichage est une structure en arborescence. La scène, qui peut contenir de nombreux objets d'affichage, est au sommet de l'arborescence. Ces objets d'affichage, qui sont eux-mêmes des conteneurs d'objets d'affichage, peuvent contenir d'autres conteneurs ou objets d'affichage.


Diagramme de la structure d'une liste d'affichage hypothétique dans un fichier SWF.

La classe DisplayObjectContainer comporte des propriétés et des méthodes qui permettent de traverser la liste d'affichage via les listes d'enfants des conteneurs d'objets d'affichage. Par exemple, le code suivant ajoute deux objets d'affichage, title et pict, à l'objet container (qui est un Sprite, et la classe Sprite étend la classe DisplayObjectContainer) :

var container:Sprite = new Sprite();
var title:TextField = new TextField();
title.text = "Hello";
var pict:Loader = new Loader();
var url:URLRequest = new URLRequest("banana.jpg");
pict.load(url);
pict.name = "banana loader";
container.addChild(title);
container.addChild(pict);

La méthode getChildAt() renvoie l'enfant de la liste d'affichage qui a la position d'index spécifiée :

trace(container.getChildAt(0) is TextField); // true

Les objets enfants sont également accessibles par leur nom. Chaque objet d'affichage possède un nom, qui est attribué par défaut par Flash Player (par exemple "instance1") si vous ne l'attribuez pas vous-même. Par exemple, le code ci-dessous démontre l'utilisation de la méthode getChildByName() pour accéder à un objet d'affichage enfant ayant pour nom "banana loader":

trace(container.getChildByName("banana loader") is Loader); // true

L'utilisation de la méthode getChildByName() peut être plus lente que celle de la méthode getChildAt().

Un conteneur d'objets d'affichage pouvant en contenir d'autres dans sa liste d'affichage, il est possible de traverser toute l'arborescence de la liste d'affichage de l'application. Par exemple, dans l'extrait de code précédent, lorsque l'opération de chargement de l'objet Loader pict est terminé, l'objet pict possède un objet d'affichage enfant, le bitmap. Pour accéder à cet objet d'affichage bitmap, vous pouvez utiliser le code pict.getChildAt(0). Mais vous pouvez également utiliser container.getChildAt(0).getChildAt(0) (puisque container.getChildAt(0) == pict).

La fonction ci-dessous produit une sortie indentée trace() de la liste d'affichage d'un conteneur d'objets d'affichage :

function traceDisplayList(container:DisplayObjectContainer,
indentString:String = ""):void
{ var child:DisplayObject; for (var i:uint=0; i < container.numChildren; i++) { child = container.getChildAt(i); trace(indentString, child, child.name); if (container.getChildAt(i) is DisplayObjectContainer) { traceDisplayList(DisplayObjectContainer(child), indentString + " ") } } }

Flash CS3

 

M'envoyer un message électronique lorsque des commentaires sont ajoutés à cette page | Rapport de commentaire

Page en cours: http://livedocs.adobe.com/flash/9.0_fr/main/00000149.html