Documentation Flash CS3 |
|||
| Programmation avec ActionScript 3.0 > Programmation de l'affichage > Avantages de l'utilisation de la liste d'affichage | |||
En ActionScript 3.0, il existe des classes séparées pour les différents types d'objets d'affichage. En ActionScript 1.0 et 2.0, un grand nombre d'objets du même type sont inclus dans une même classe : la classe MovieClip.
Cette individualisation des classes et la structure hiérarchique des listes d'affichage offrent les avantages suivants :
Ces avantages sont décrits dans les sections suivantes.
En ActionScript 1.0 et 2.0, il n'était possible de tracer des formes que dans un objet MovieClip. En ActionScript 3.0, il existe des classes d'objets d'affichage qui permettent de tracer des formes plus simplement. Dans la mesure où ces classes d'objets d'affichage d'ActionScript 3.0 ne comprennent pas le jeu complet des méthodes et des propriétés qui figurent dans un objet MovieClip, ils sont plus économes en mémoire et en temps processeur.
Par exemple, chaque objet MovieClip comporte des propriétés pour le scénario du clip, ce qui n'est pas le cas d'un objet Shape. Les propriétés permettant de gérer le scénario nécessitent beaucoup de mémoire et de ressources processeur. En ActionScript 3.0, l'utilisation de l'objet Shape autorise de meilleures performances. L'objet Shape nécessite moins de ressources supplémentaires que l'objet MovieClip, qui est plus complexe. Flash Player n'a pas à gérer les propriétés de MovieClip qui ne sont pas utilisées, ce qui en améliore la vitesse et la consommation mémoire.
En ActionScript 1.0 et 2.0, la profondeur était gérée par le biais d'un schéma linéaire et par certaines méthodes, par exemple getNextHighestDepth().
ActionScript 3.0 comprend désormais la classe DisplayObjectContainer, qui dispose de méthodes et propriétés plus pratiques pour gérer la profondeur des objets d'affichage.
En ActionScript 3.0, lorsque l'utilisateur déplace un objet d'affichage vers une nouvelle position dans la liste des enfants d'une instance de DisplayObjectContainer, les autres enfants de ce conteneur sont automatiquement repositionnés et reçoivent leur nouvelle position d'index dans le conteneur d'objets d'affichage.
De plus, en ActionScript 3.0 il est toujours possible de découvrir tous les objets enfants d'un conteneur d'objets d'affichage donné. Chaque instance de DisplayObjectContainer possède une propriété numChildren qui liste le nombre d'enfants du conteneur d'objets d'affichage. Puisque la liste des enfants d'un conteneur d'objets d'affichage est indexée, il est donc possible d'examiner chaque objet de cette liste de la position d'index 0 à la dernière position d'index (numChildren - 1). En ActionScript 1.0 et 2.0, cette opération n'était pas possible avec les méthodes et les propriétés d'un objet MovieClip.
En ActionScript 3.0, il est facile de traverser séquentiellement la liste d'affichage. Il n'y a pas de positions non utilisées dans les numéros d'index de la liste des enfants d'un conteneur d'objets d'affichage. Il est donc beaucoup plus aisé de traverser la liste d'affichage et de gérer la profondeur des objets qu'en ActionScript 1.0 et 2.0. En ActionScript 1.0 et 2.0, l'ordre de profondeur des objets d'un clip pouvait comporter des indices vides, ce qui rendait plus difficile la traversée de la liste des objets. En ActionScript 3.0, chaque liste des enfants d'un conteneur d'objets d'affichage est mise en cache en interne, sous forme de tableau d'éléments, ce qui autorise une recherche très rapide à l'aide de l'index. Une boucle parcourant tous les objets d'un conteneur est également très rapide.
De plus, en ActionScript 3.0, il est également possible d'accéder aux enfants d'un conteneur d'objets d'affichage à partir de leur nom, à l'aide de la méthode getChildByName() de la classe DisplayObjectContainer.
En ActionScript 1.0 et 2.0, il était impossible d'accéder à certains objets, par exemple les formes vectorielles, qui étaient dessinées dans l'environnement auteur Flash. En ActionScript 3.0, tous les objets sont accessibles dans la liste d'affichage, qu'ils aient été créés en ActionScript ou dans l'environnement auteur Flash. Pour plus d'informations, consultez la section Traversée de la liste d'affichage.
En ActionScript 3.0, il est possible de créer des objets d'affichage ne figurant pas parmi les objets visibles dans la liste. Ils sont alors appelés objets d'affichage hors liste. Un objet d'affichage n'est ajouté à la liste des objets visibles que lorsque vous appelez la méthode addChild() ou addChildAt() d'une instance de DisplayObjectContainer qui a déjà été ajoutée à la liste d'affichage.
Les objets d'affichage hors liste permettent d'assembler des objets d'affichage complexes, par exemple dans le cas de plusieurs conteneurs ayant chacun plusieurs objets d'affichage. En conservant des objets d'affichage hors liste, vous pouvez assembler des objets compliqués sans consommer de temps de calcul pour le rendu de ces objets. Ces objets hors liste peuvent ensuite être ajoutés à la liste le moment venu. De plus, un enfant d'un conteneur d'objets d'affichage peut être à tout moment ajouté à la liste d'affichage à la position désirée ou en être supprimé.
En ActionScript 1.0 et 2.0, il était souvent nécessaire d'ajouter de nouveaux objets MovieClip à un fichier SWF pour créer des formes de base ou pour afficher des bitmaps. En ActionScript 3.0, la classe DisplayObject comporte de nombreuses sous-classes, dont Shape et Bitmap. Les classes en ActionScript 3.0 étant plus spécialisées pour des types d'objets spécifiques, il est plus facile de créer des sous-classes des classes intégrées.
Par exemple, pour tracer un cercle en ActionScript 2.0, vous pouviez créer une classe CustomCircle étendant la classe MovieClip lors de l'instanciation d'un objet de la classe CustomCircle. Toutefois, cette classe comportait aussi un certain nombre de propriétés et de méthodes de la classe MovieClip (par exemple totalFrames) qui ne s'appliquaient pas à votre classe. En ActionScript 3.0, par contre, vous pouvez créer une classe CustomCircle étendant l'objet Shape mais, à ce titre, ne comportant pas les propriétés et méthodes contenues dans la classe MovieClip. Le code suivant est un exemple d'une classe CustomCircle :
import flash.display.*;
private class CustomCircle extends Shape
{
var xPos:Number;
var yPos:Number;
var radius:Number;
var color:uint;
public function CustomCircle(xInput:Number,
yInput:Number,
rInput:Number,
colorInput:uint)
{
xPos = xInput;
yPos = yInput;
radius = rInput;
color = colorInput;
this.graphics.beginFill(color);
this.graphics.drawCircle(xPos, yPos, radius);
}
}
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/00000144.html