Utilisation de conteneurs d’objets d’affichage

Flash Player 9 et les versions ultérieures, Adobe AIR 1.0 et les versions ultérieures

Si un objet DisplayObjectContainer est supprimé de la liste d’affichage ou s’il est transféré ou transformé d’une autre façon, chaque objet d’affichage de DisplayObjectContainer est également supprimé, transféré ou transformé.

Un conteneur d’objets d’affichage correspond à un type d’objet d’affichage et peut être ajouté à un autre conteneur d’objets d’affichage. Par exemple, l’image suivante illustre un conteneur d’objets d’affichage, pictureScreen, qui comporte une forme de contour et quatre autres conteneurs d’objets d’affichage (de type PictureFrame) :

Afficher le graphique en taille réelle
A.
Forme définissant la bordure du conteneur d’objets d’affichage pictureScreen

B.
Quatre conteneurs d’objets d’affichage, qui sont des enfants de l’objet pictureScreen

Pour qu’un objet d’affichage apparaisse dans la liste d’affichage, vous devez l’ajouter à un conteneur d’objets d’affichage figurant dans la liste d’affichage. A cet effet, vous utilisez la méthode addChild() ou la méthode addChildAt() de l’objet conteneur. Par exemple, sans la dernière ligne du code suivant, l’objet myTextField ne s’afficherait pas :

var myTextField:TextField = new TextField(); 
myTextField.text = "hello"; 
this.root.addChild(myTextField);

Dans cet exemple de code, this.root pointe vers le conteneur d’objets d’affichage MovieClip qui comporte le code. Dans votre propre code, vous pouvez stipuler un autre conteneur.

Utilisez la méthode addChildAt() pour ajouter l’enfant à une position déterminée de la liste des enfants du conteneur d’objets d’affichage. Ces positions d’index basées sur zéro dans la liste des enfants se réfèrent à l’ordre d’apparition (de l’avant à l’arrière) des objets d’affichage. Considérons par exemple les trois objets d’affichage suivants. Chaque objet a été créé à partir d’une classe personnalisée appelée Ball.

L’ordre d’apparition de ces objets d’affichage dans leur conteneur peut être modifié par le biais de la méthode addChildAt(). Considérons par exemple le code qui suit :

ball_A = new Ball(0xFFCC00, "a"); 
ball_A.name = "ball_A"; 
ball_A.x = 20; 
ball_A.y = 20; 
container.addChild(ball_A); 
 
ball_B = new Ball(0xFFCC00, "b"); 
ball_B.name = "ball_B"; 
ball_B.x = 70; 
ball_B.y = 20; 
container.addChild(ball_B); 
 
ball_C = new Ball(0xFFCC00, "c"); 
ball_C.name = "ball_C"; 
ball_C.x = 40; 
ball_C.y = 60; 
container.addChildAt(ball_C, 1);

Une fois ce code exécuté, les objets d’affichage sont placés comme suit dans l’objet DisplayObjectContainer container. Notez l’ordre d’apparition des objets.

Pour placer un objet en tête de la liste d’affichage, il suffit de l’ajouter à nouveau à celle-ci. Par exemple, après le code précédent, utilisez la ligne de code suivante pour placer ball_A en première position dans la pile :

container.addChild(ball_A);

Ce code supprime ball_A de son emplacement actuel dans la liste d’affichage de container, et l’ajoute ensuite au sommet de la liste, ce qui a pour effet de le placer en haut de l’empilement d’objets.

Vous disposez de la méthode getChildAt() pour vérifier l’ordre d’apparition des objets d’affichage. La méthode getChildAt() renvoie les objets enfant d’un conteneur en fonction du numéro d’index transmis. Par exemple, le code suivant révèle le nom des objets d’affichage placés à des positions diverses dans la liste des enfants de l’objet DisplayObjectContainer container :

trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_C 
trace(container.getChildAt(2).name); // ball_B

Si vous supprimez un objet d’affichage de la liste des enfants de son conteneur parent, les éléments de la liste ayant un indice plus élevé descendent tous d’une position dans l’index des enfants. Ainsi, si nous reprenons l’exemple précédent, le code ci-après illustre le transfert de l’objet d’affichage qui occupait la position 2 dans l’objet DisplayObjectContainer container vers la position 1 suite à la suppression d’un objet d’affichage occupant une position inférieure dans la liste d’enfants :

container.removeChild(ball_C); 
trace(container.getChildAt(0).name); // ball_A 
trace(container.getChildAt(1).name); // ball_B

Les méthodes removeChild() et removeChildAt() ne suppriment pas entièrement une occurrence d’objet d’affichage. Elles se contentent de la supprimer de la liste des enfants du conteneur. Une autre variable peut continuer à faire référence à l’occurrence (utilisez l’opérateur delete pour supprimer totalement un objet).

Un objet d’affichage ne possédant qu’un seul conteneur parent, vous ne pouvez ajouter une occurrence d’objet d’affichage qu’à un seul conteneur d’objets d’affichage. Par exemple, le code suivant indique que l’objet d’affichage tf1 ne peut figurer que dans un seul conteneur (soit, dans ce cas, un Sprite, qui étend la classe DisplayObjectContainer) :

tf1:TextField = new TextField(); 
tf2:TextField = new TextField(); 
tf1.name = "text 1"; 
tf2.name = "text 2"; 
 
container1:Sprite = new Sprite(); 
container2:Sprite = new Sprite(); 
 
container1.addChild(tf1); 
container1.addChild(tf2); 
container2.addChild(tf1); 
 
trace(container1.numChildren); // 1 
trace(container1.getChildAt(0).name); // text 2 
trace(container2.numChildren); // 1 
trace(container2.getChildAt(0).name); // text 1

Si vous ajoutez à un conteneur d’objets d’affichage un objet qui est déjà contenu dans un autre conteneur d’objets d’affichage, l’objet sera supprimé de la liste des enfants de ce dernier.

Outre les méthodes décrites précédemment, la classe DisplayObjectContainer définit plusieurs méthodes d’utilisation des objets d’affichage enfant, notamment :

  • contains() : détermine si un objet d’affichage est un enfant d’un objet DisplayObjectContainer.

  • getChildByName() : extrait un objet d’affichage en fonction de son nom.

  • getChildIndex() : renvoie la position d’index d’un objet d’affichage.

  • setChildIndex() : modifie la position d’un objet d’affichage enfant.

  • removeChildren() : supprime plusieurs objets d’affichage enfants.

  • swapChildren() : permute l’ordre de deux objets d’affichage.

  • swapChildrenAt() : permute l’ordre de deux objets d’affichage définis en fonction de leur valeur d’index.

Pour plus d’informations, voir les entrées pertinentes du manuel Guide de référence ActionScript 3.0 pour la plate-forme Adobe Flash.

N’oubliez pas qu’un objet d’affichage qui ne figure pas dans la liste d’affichage (donc, qui ne se trouve pas dans un conteneur d’objets d’affichage enfant de la scène) est appelé objet d’affichage hors liste.