IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

La nouvelle architecture du framework ActionScript 3

Article décrivant l'architecture du framework ActionScript 3. ♪

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. L'architecture

Dans la nouvelle architecture, une application flash possède une liste d'affichage (« display list »). Cette liste contient tous les éléments visibles. Ces éléments se répartirent en deux types :

  • DisplayObject : élément visible qui se caractérise par sa position, ses dimensions, etc. ;
  • DisplayObjectContainer : zone rectangulaire qui peut contenir aussi bien des DisplayObjectque des DisplayObjectConteneur.

En regardant cette liste d'affichage, nous pourrions la comparer à un arbre dans lequel les feuilles sont les DisplayObjects et les nœuds sont les DisplayObjectContainers.

D'ailleurs cette structure est basée sur le design pattern Composite :

Design Pattern Composite

À la base de cette liste d'affichage, nous trouvons le type Stage qui est le conteneur principal. Nous pouvons le comparer au _root de cette application. L'accès à ce conteneur principal se fait à l'aide de la propriété stage de tous les DisplayObjects.

Mais où sont dans tout ça, les MovieClip, les TextField, etc. Voici un schéma qui nous les situe :

Nous remarquerons au passage que tout est EventDispatcher, ce qui signifie que tous les éléments de ce schéma peuvent émettre des événements.

II. Exemple

Nous allons voir à travers une application, les comportements que nous proposent DisplayObject et DisplayObjectContainer. Dans cette application, trois outils en haut à droite nous permettent d'ajouter et retirer des formes rectangulaires et ovales. Nous pouvons sélectionner une forme, cette sélection est indiquée par une flèche rouge, et lui ajouter ainsi d'autres formes grâce au comportement des DisplayObjectContainer sachant que chaque forme peut être déplacée :

[ALT-PASTOUCHE]

J'ai d'abord créé une classe Application qui hérite de la classe Sprite que je passe en tant que document flash (voir tutoriel : La classe document dans Flash 9 ). Lorsque la fonction constructeur est appelée, je crée trois outils, je laisse la classe Tool pour un prochain tutoriel, voici la fonction constructeur commentée :

 
Sélectionnez
public function Application() {
        // Creation d'une surface de travail
        // C'est dans celui-ci que nous allons ajouter nos formes
    screen = new Square(250,250,0xFFFFFF);
    screen.name = "screen";
 
        // Comme je le disais tout est EventDispatcher
        // Ici nous écoutons les événements de pression et relâchement
        // de la souris
    screen.addEventListener(MouseEvent.MOUSE_DOWN,selectShape);
    screen.addEventListener(MouseEvent.MOUSE_UP,stopDragShape);
 
        // Definit par defaut la forme active
    activeShape = screen;
 
        // Création des 3 outils pour l'ajout des formes rectangulaires, ovales et la suppression
    toolAddRect = new Tool(new RectangleIcon());
    toolAddRect.commandType = "rect";
    toolAddRect.addEventListener(ToolEvent.COMMAND_TYPE,addShape);
    toolAddRect.move(225,10);
 
    toolAddOval = new Tool(new OvalIcon());
    toolAddOval.commandType = "oval";
    toolAddOval.addEventListener(ToolEvent.COMMAND_TYPE,addShape);
    toolAddOval.move(225,35);
 
    toolEraser = new Tool(new EraserIcon());
    toolEraser.commandType = "erase";
    toolEraser.addEventListener(ToolEvent.COMMAND_TYPE,eraseShape);
    toolEraser.move(225,60);
    //
 
        // Instancie un élément graphique présent dans la bibliothèque
    ptr = new Pointeur();
    ptr.name = "pointeur";
        // Nous faisons en sorte de désactiver l'utilisation de la souris sur cet élément
    ptr.mouseEnabled = false;
 
        // Ajout des éléments à notre liste d'affichage
    addChild(screen);
    addChild(toolAddRect);
    addChild(toolAddOval);
    addChild(toolEraser);
}

Examinons les gestionnaires d'événements :

 
Sélectionnez
private function selectShape(e:MouseEvent):void {
        // Nous vérifions si l'élément actif contient une flèche rouge
        // si c'est le cas nous la retirons à l'aide de la méthode removeChild
        // comportement de la classe DisplayObjectContainer
        // Cette méthode nous demande la référence à la flèche rouge
    if(activeShape.contains(ptr)) {
        activeShape.removeChild(ptr);
    }
 
        // Si la cible de l'événement est screen
        // Nous l'attribuons en tant que forme active 
    if(e.target == screen) {
        activeShape = screen;
    } else {
                // Dans le cas contraire
                // nous attribuons la cible de l'événement
                // comme forme active
        activeShape = e.target;
                // Nous lui ajoutons une flèche pour indiquer
                // quelle est la forme active
        activeShape.addChild(ptr);
                // Et nous pouvons commencer à la déplacer
        activeShape.startDrag();
    }
}
 
private function stopDragShape(e:MouseEvent):void {
        // Nous arrêtons le déplacement de la forme active
        // Lorsque le bouton gauche de votre souris est relâché
    activeShape.stopDrag();
}

Regardons la méthode exécutée lorsque nous supprimons une forme :

 
Sélectionnez
private function eraseShape(e:ToolEvent):void { // ToolEvent est un evenement personnalise
        // Nous vérifions que nous ne sommes pas sur le screen
        // afin d'éviter de le supprimer
    if(activeShape != screen) {
               // Nous récupérons le parent de la forme active
               // à l'aide de la propriété parent de DiplayObjectContainer
        var container:DisplayObjectContainer = activeShape.parent;
               // Le parent nous permet ainsi de supprimer la forme active à l'aide de la
               // méthode removeChild qui nous demande la référence de cette dernière
        container.removeChild(activeShape);
    }
}

III. Téléchargement

Nous venons de voir à travers cet exemple, la nouvelle architecture de AS3, pour ceux qui sont intéressés par le code, vous le trouverez ici : Architecture.zipFichier zip contenant les sources de l'exemple (MiroirFichier zip contenant les sources de l'exemple)

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2006-2007 Olivier Bugalotto. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.