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
.