Introduction à la Programation Orientée Objet (ou OOP) - partie 3

 A présent, il est temps d'ajouter un écouteur pour le MOUSE_OVER et MOUSE_OUT. Nous voulons utilsez l'évenement MouseEvent, qui est un objet. Pour pouvior l'utiliser, nous devons l'importer de la même manière que MovieClip:

package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
   
    public class AnimatedButton
    {
        public function AnimatedButton(mc:MovieClip)
        {
            mc.mouseChildren = false;
            mc.buttonMode = true;
        }
    }
}

Maintenant, nous pouvons manipuler les événements de souris. Rajoutons deux écouteurs à notre mc pour utiliser le MOUSE_OVER et le MOUSE_OUT:

package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
   
    public class AnimatedButton
    {
        public function AnimatedButton(mc:MovieClip)
        {
            mc.mouseChildren = false;
            mc.buttonMode = true;
            mc.addEventListener(MouseEvent.MOUSE_OVER, over);
            mc.addEventListener(MouseEvent.MOUSE_OUT, out);

        }
    }
}

Voilà pour nos écouteurs. Mais il faut encore créer les fonctions "over" et "out". Nous allons créer deux fonctions publiques qui géreront le MOUSE_OVER et le MOUSE_OUT.

package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
   
    public class AnimatedButton
    {
        public function AnimatedButton(mc:MovieClip)
        {
            mc.mouseChildren = false;
            mc.buttonMode = true;
            mc.addEventListener(MouseEvent.MOUSE_OVER, over);
            mc.addEventListener(MouseEvent.MOUSE_OUT, out);
        }
       
        public function over(e:MouseEvent):void
        {
           
        }
       
        public function out(e:MouseEvent):void
        {
           
        }

    }
}

Il est temps de vous montrer l'utilité du mot clé "private". En créant des fonctions, appellées, rappellons le, méthodes, publiques dans une classes, elle sont visibles pour l'utilisateur de notre objet. Ainsi, maintenant, si nous créons un "btn = new AnimatedButton(my_mc);", nous pourrons appeller la méthode "btn.over()" ! Or ça ne sert à rien, puisque nous voulons que l'utilisation de cette méthode soit faite par l'objet lui-même uniquement, en interne ! Nous ne voulons pas que quelqu'un puisse actionner cette méthode à sa guise, puisque notre bouton s'animerait n'importe comment. Donc, pour limiter leur utilisation, nous les déclarons "private":

package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
   
    public class AnimatedButton
    {
        public function AnimatedButton(mc:MovieClip)
        {
            mc.mouseChildren = false;
            mc.buttonMode = true;
            mc.addEventListener(MouseEvent.MOUSE_OVER, over);
            mc.addEventListener(MouseEvent.MOUSE_OUT, out);
        }
       
        private function over(e:MouseEvent):void
        {
           
        }
       
        private function out(e:MouseEvent):void
        {
           
        }
    }
}

Ainsi, l'utilisation de ces méthode est maintenant limitée à la portée des crochets de "class {}". Personne en dehors ne peut utiliser ou voir l'existence de ces méthodes. Mais elles existent bel et bien. Et leur effet, lui, est bien visible.

Maintenant, il nous faut savoir à partir de quelles images clés il nous faut animer notre bouton. Pour le savoir, passons ces données en paramètres, après le MovieClip:

package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
   
    public class AnimatedButton
    {
        public function AnimatedButton(mc:MovieClip, overFrame:int, outFrame:int)
        {
            mc.mouseChildren = false;
            mc.buttonMode = true;
            mc.addEventListener(MouseEvent.MOUSE_OVER, over);
            mc.addEventListener(MouseEvent.MOUSE_OUT, out);
        }
       
        private function over(e:MouseEvent):void
        {
           
        }
       
        private function out(e:MouseEvent):void
        {
           
        }
    }
}

Vous noterez que pour utilser les "int" (nombres entiers - plus rapide à l'execution que Number), nous n'avons pas besoin d'importer quoi que ce soit. C'est parce que les objets Number, int, uint, String, Array et Object sont des objets primitifs qui sont nécessaire à l'exécution de Flash même, donc toujours disponible. Mais de passer ces nombres en paramètres ne nous sert à rien, puisque nous avons besoin de ces derniers dans nos méthodes "over" et "out". Il faut donc les stocker dans des variables. Il en va de même pour notre "mc", puisque sa portée est limitée au constructeur. Voici comment on crée des variables accessibles dans tous l'objet:

package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    
    public class AnimatedButton
    {
        private var _over:int;
        private var _out:int;
        private var _mc:MovieClip;

       
        public function AnimatedButton(mc:MovieClip, overFrame:int, outFrame:int)
        {
            mc.mouseChildren = false;
            mc.buttonMode = true;
            mc.addEventListener(MouseEvent.MOUSE_OVER, over);
            mc.addEventListener(MouseEvent.MOUSE_OUT, out);
        }
       
        private function over(e:MouseEvent):void
        {
            mc.gotoAndPlay(_over);
        }
       
        private function out(e:MouseEvent):void
        {
            mc.gotoAndPlay(_out);
        }
    }
}

La logique des "private" et "public" et la même que pour les méthodes. Par convention, on écrit les variables disponibles dans toutes les méthodes de l'objet avec un "_" devant, mais ce n'est pas nécessaire. Maintenant, il nous faut assigner nos valeurs en paramètre à ces variables et les réutiliser dans nos méthodes "over" et "out".

package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    
    public class AnimatedButton
    {
        private var _over:int;
        private var _out:int;
        private var _mc:MovieClip;
       
        public function AnimatedButton(mc:MovieClip, overFrame:int, outFrame:int)
        {
            _over = overFrame;
            _out = outFrame;
            _mc = mc;

           
            mc.mouseChildren = false;
            mc.buttonMode = true;
            mc.addEventListener(MouseEvent.MOUSE_OVER, over);
            mc.addEventListener(MouseEvent.MOUSE_OUT, out);
        }
       
        private function over(e:MouseEvent):void
        {
            _mc.gotoAndPlay(_over);
        }
       
        private function out(e:MouseEvent):void
        {
            _mc.gotoAndPlay(_out);
        }
    }
}

Testez votre .swf. A présent, vous devriez voir votre bouton s'animer. Vous pouvez sans autre créer de multiples boutons, chacun ne requérant qu'une seule ligne de code. Bien sûr, cet objet est extrémement simple. Essayez d'étendre ses fonctionnalités par vous même.

Voici donc une petite introduction à l'OOP. Vous avez pu voir la relative simplicité du code, mais la puissance qu'elle peut fournir.

 Vous pouvez télécharger les sources de ce tutoriel ici

Page 1 - Page 2 - Page 3