Académique Documents
Professionnel Documents
Culture Documents
10
Diffusion d’événements
personnalisés
L’HISTOIRE .............................................................................................................1
LA CLASSE EVENTDISPATCHER ......................................................................2
MISE EN APPLICATION ..............................................................................................4
CHOISIR UN NOM D’ÉVÉNEMENT ..............................................................................9
ETENDRE EVENTDISPATCHER ....................................................................... 11
STOCKER EVENTDISPATCHER ...................................................................... 14
PASSER DES INFORMATIONS ................................................................................... 19
MENU ET ÉVÉNEMENT PERSONNALISÉ ................................................................... 23
L’histoire
Dans une application ActionScript, la communication inter objets se
réalise majoritairement par la diffusion d’événements natifs ou
personnalisés. Mais qu’est ce qu’un événement personnalisé ?
Il s’agit d’un événement qui n’existe pas au sein du lecteur Flash mais
que nous ajoutons afin de gérer les différentes interactions entre nos
objets. Depuis très longtemps ActionScript intègre différentes classes
permettant de diffuser nos propres événements.
1 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
La classe EventDispatcher
Comme nous le voyons depuis le début de l’ouvrage, ActionScript 3
est un langage basé sur un modèle événementiel appelé Document
Object Model. Celui-ci repose sur la classe EventDispatcher dont
toutes les classes natives de l’API du lecteur Flash héritent.
Dans le code suivant nous voyons la relation entre la classe
EventDispatcher et deux classes graphiques :
var monSprite:Sprite = new Sprite();
// affiche : true
trace( monSprite is EventDispatcher );
// affiche : true
trace( monClip is EventDispatcher );
// fonction écouteur
function ecouteur ( pEvt:Event ):void
trace( pEvt );
2 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
// fonction écouteur
function ecouteur (pEvt:Event):void
3 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
// fonction écouteur
function ecouteur ( pEvt:Event ):void
A retenir
• Le modèle événementiel ActionScript 3 repose sur la classe
EventDispatcher.
• Toutes les classes issues du paquetage flash peuvent diffuser des
événements natifs ou personnalisés.
• Afin de diffuser un événement, nous utilisons la méthode
dispatchEvent.
• La méthode dispatchEvent accepte comme paramètre une
instance de la classe Event.
Mise en application
Nous allons développer une classe permettant à un symbole de se
déplacer dans différentes directions. Lorsque celui-ci arrive à
destination nous souhaitons diffuser un événement approprié.
A côté d’un nouveau document Flash CS3, nous sauvons une classe
nommée Balle.as contenant le code suivant :
package
import flash.display.Sprite;
trace( this );
4 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
A chaque clic souris sur la scène, la balle doit se diriger vers le point
cliqué. Nous devons donc écouter l’événement MouseEvent.CLICK
de manière globale auprès de l’objet Stage.
Nous avons vu au cours du précédent chapitre comment accéder de
manière sécurisée à l’objet Stage. Nous intégrons le même
mécanisme dans la classe Balle :
package
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
{
// écoute de l'événement Event.ADDED_TO_STAGE
addEventListener ( Event.ADDED_TO_STAGE, ajoutAffichage );
5 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
{
// écoute de l'événement Event.ADDED_TO_STAGE
addEventListener ( Event.ADDED_TO_STAGE, ajoutAffichage );
6 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.Event;
{
// écoute de l'événement Event.ADDED_TO_STAGE
addEventListener ( Event.ADDED_TO_STAGE, ajoutAffichage );
7 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
// évalue la destination x et y
var destinationX:Number = ( sourisX - width/2);
var destinationY:Number = ( sourisY - height/2);
8 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
// évalue la destination x et y
var destinationX:Number = ( sourisX - width/2);
var destinationY:Number = ( sourisY - height/2);
// évalue la destination x et y
var destinationX:Number = ( sourisX - width/2);
var destinationY:Number = ( sourisY - height/2);
9 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
// fonction écouteur
function arrivee ( pEvt:Event ):void
10 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
// évalue la destination x et y
var destinationX:Number = ( sourisX - width/2);
var destinationY:Number = ( sourisY - height/2);
Nous venons de traiter à travers cet exemple le cas le plus courant lors
de la diffusion d’événements personnalisés. Voyons maintenant
d’autres cas.
A retenir
• Un événement doit porter un nom simple et intuitif.
• Afin de stocker le nom d’un événement nous utilisons toujours une
propriété constante de classe.
Etendre EventDispatcher
Rappelez-vous que toutes les classes résidant dans le paquetage
flash héritent de la classe EventDispatcher. Dans vos
développements, certaines classes n’hériteront pas de classes natives
et n’auront pas la possibilité de diffuser des événements par défaut.
11 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
{
import flash.events.Event;
{
import flash.events.Event;
import flash.events.EventDispatcher;
12 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
// fonction écouteur
function chargementTermine ( pEvt:Event ):void
Une partie du code de la classe XMLLoader n’est pas montré car nous
n’avons pas encore traité la notion de chargement externe. Nous
13 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
Stocker EventDispatcher
Afin de bien comprendre cette nouvelle notion, nous allons nous
attarder sur la classe Administrateur développée lors du chapitre 8.
14 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
trace("Joue un son");
import flash.events.EventDispatcher;
15 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
trace("Joue un son");
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.Event;
16 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
trace("Joue un son");
17 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
18 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
// fonction écouteur
function deconnexionJoueur ( pEvt:Event ):void
A retenir
• Lorsque nous ne pouvons pas étendre la classe
EventDispatcher nous stockons une instance de celle-ci et
déléguons les fonctionnalités.
• L’interface IeventDispatcher permet une implémentation
obligatoire des différentes méthodes nécessaires à la diffusion
d’événements.
19 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
Nous allons donc étendre la classe Event et créer une classe nommée
AdministrateurEvent :
package
import flash.events.Event;
20 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
Il est important de noter que jusqu’à présent nous n’avions diffusé des
événements qu’avec la classe Event. Lorsque nous définissons une
classe événementielle spécifique nous stockons la constante de classe
dans celle-ci.
Ainsi au lieu de cibler le nom de l’événement sur la classe diffusant
l’événement :
// écoute l'événement Administrateur.KICK_JOUEUR
monModo.addEventListener ( Administrateur.KICK_JOUEUR, joueurQuitte );
import flash.events.Event;
21 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
}
// la méthode toString doit être surchargée
public override function toString ():String
22 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
// fonction écouteur
function joueurQuitte ( pEvt:AdministrateurEvent ):void
A retenir
• Afin de passer des paramètres lors de la diffusion d’un événement,
nous devons obligatoirement étendre la classe Event.
• Les classes et sous-classes d’Event représentent les objets
événementiels diffusés.
import flash.events.Event;
23 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
}
// la méthode toString doit être surchargée
public override function toString ():String
24 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
// nombre de rubriques
var lng:int = donnees.length;
// conteneur du menu
var conteneurMenu:Sprite = new Sprite();
addChild ( conteneurMenu );
// positionnement
monBouton.y = 50 * i;
// affiche :
/*accueil.swf
photos.swf
25 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
blog.swf
liens.swf
*/
trace( pEvt.lien );
{
import flash.display.Shape;
import flash.display.Sprite;
import flash.text.Font;
import flash.text.TextFormat;
import org.events.ButtonEvent;
// import des classes liées Tween au mouvement
import fl.transitions.Tween;
import fl.transitions.easing.Bounce;
// import de la classe MouseEvent
import flash.events.MouseEvent;
// import de la classe TextField et TextFieldAutoSize
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
26 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
// affecte la légende
legende.text = pLegende;
// taille de la police
formatage.size = 12;
// dessine le bouton
fondBouton.graphics.beginFill ( couleur, 1 );
fondBouton.graphics.drawRect ( 0, 0, pWidth, pHeight );
27 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
{
// stocke la longueur du tableau
var lng:int = Button.tableauBoutons.length;
// démarrage de l'animation
etatTween.continueTo ( 2, vitesse );
{
// referme le bouton
etatTween.continueTo ( 1, vitesse );
// affecte la vitesse
if ( pVitesse >= 1 && pVitesse <= 10 ) vitesse = pVitesse;
else
28 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org
Chapitre 10 – Diffusion d’événements personnalisés – version 0.1.1
A retenir
• Nous pouvons définir autant de propriétés que nous le souhaitons au
sein de l’objet événementiel diffusé.
Nous allons nous intéresser maintenant à la notion de classe du
document. Cette nouveauté apportée par Flash CS3 va nous permettre
de rendre nos développements ActionScript 3 plus aboutis.
En avant pour le chapitre 11 intitulé Classe du document.
29 / 29
Thibault Imbert
pratiqueactionscript3.bytearray.org