Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox
Compatible ActionScript 3. Cliquer pour en savoir plus sur les compatibilités.Par Nataly, le 01 juin 2010

Introduction
Classe de base (#1)
Classe de base (#2)
Héritage et surcharge (#1)
Héritage et surcharge (#2)
Diffuser des événements
Classe liée
Classe de document
Classe externe : une visionneuse (#1)
Classe externe : une visionneuse (#2)
Classe externe : méthodes statiques

Diffuser des événements

L"extension Adobe Flash Plugin est nécessaire pour afficher ce contenu.

Hé oui, ne serait-ce que pour faire cette petite nouillerie, il nous faut un événement (diffusé par la classe BoiteAlerte au clic sur son unique bouton). Un événement qu'on écouterait comme tous les événements du monde as3 avec addEventListener :

var bteDemo:Mv_BoiteAlerte=new Mv_BoiteAlerte();
// [...]
 
// associer un écouteur sur l'événement maison
bteDemo.addEventListener(BoiteAlerte.BT_CLICK,compte);
 
// la fonction de rappel
var compt:int=0;
function compte(e:Event) {
	compt++;
	txtSortie.text="Boite affichée "+compt+" fois";

Si vous êtes encore là et que vous n'avez pas jeté l'éponge (le sac à dos et les croquenots), dites vous que la côte la plus raide est franchie. Diffuser un événement tient de la formalité.

Si je reprends la métaphore du début, il s'agit pour nous de faire en sorte que la boite “crie” un truc quand on clique sur le bouton. Elle criera “on a cliqué sur mon bouton OK”, nous n'aurons donc qu'à écouter cet événement, pour y “brancher” la fonction de notre choix, comme illustré au dessus.

Crier un truc, plus académiquement dit c'est diffuser un événement, outre-atlantique diffuser c'est dispatch.
Faire diffuser un événement par un objet, c'est donc utiliser cette syntaxe :

l_Objet.dispatchEvent( ... );

Les points de suspension valant un événement ;)

Créer un événement, ça se fait à l'aide du mot clé new, comme toujours (puisque c'est un objet, puisque tout est Objet - POO on a dit).

new Event ( "nom_De_L_Evénement" )

Dans le cas qui nous occupe il faut tout bonnement diffuser un événement maison au clic sur le bouton, donc dans la fonction btOKQdClick.

		private function btOKQdClick(me:MouseEvent):void {
			trace("ferme ");
			ferme();
			dispatchEvent( new Event ("BtClick" ));
		}

On choisit le nom qu'on veut, mais bien sûr, plus il sera parlant mieux ce sera.
On pourrait dès maintenant écouter cet événement :

bteDemo.addEventListener("BtClick",compte);

Respecter les conventions d'écriture

… mais puisque maintenant on joue dans la cours des grands (Si, si… Allez ! Un peu d'autosatisfaction bien mesurée de peut pas nuire ;)), on va faire les choses vraiment bien et respecter les standards ActionScript 3 qui veulent que tous les événements soient stockés dans des propriétés constantes de la classe liée à l'événement.

En français courant : utiliser une variable globale publique constante (et statique, acceptez le comme tel, j'expliquerai ce qu'est ce mot static en fin de parcours)

	public class BoiteAlerte extends BoiteModale {
		public var prompt:String="";
                // ici la constante :
		public static const BT_CLICK:String="BtClick";

Et ben voilà, c'est tout. C'est fini, la classe est parfaitement fonctionnelle :)

Bien entendu puisqu'on utilise la propriété BT_CLICK de la classe (dans l'écouteur), il faut l'importer :

import Interface.BoitesModales.BoiteAlerte;

Enregistrement de l'écouteur :

bteDemo.addEventListener(BoiteAlerte.BT_CLICK,compte);





Classe EventDispatcher

C'est bien pratique de pouvoir aussi facilement diffuser des événements :)
Le mérite en revient à la classe EventDispatcher (diffuseur d'événements chez Molière) dont la classe MovieClip hérite.
C'est le résultat d'une très longue lignée d'héritage. Allons voir ce qu'en raconte la doc :

Les flèches se lisent : hérite de…
MovieClip hérite de Sprite qui hérite de DisplayObjectContainer qui hérite de InteractiveObject qui hérite de DisplayObject qui hérite de EventDispatcher qui hérite de Object.

D'ailleurs si on clique sur EventDispatcher, la doc nous dresse la liste de toutes les classes qui en héritent directement, comme vous le voyez ça fait du monde, on va pouvoir en abuser de cette technique :)
Qui râle qu'on n'y trouve pas MovieClip ?
Directement, j'ai dit.
MovieClip est l'arrière-arrière-petite fille de DisplayObject…

Si vous prenez l'habitude d'aller régulièrement jeter un œil aux en têtes de la doc, vous vous y retrouverez très vite… ;)

Mise en œuvre : la boite Oui/Non

Pour vous faire la main, je vous laisse écrire la classe BoiteOuiNon. C'est une classe de base qui sera associée à des symboles contenant deux boutons (au lieu d'un, la belle affaire :)) et un champ texte.
Chacun des boutons fermera la boite et la boite diffusera deux événements BTOUI_CLICK et BTNON_CLICK

Comme sur le swf d'introduction

Et puis même, pour ceux qui ont envie de trainasser encore un peu en terrain apprivoisé et de jouer avec leurs nouveaux copains du pays de Poo, il y a l'idée de se faire une boite de saisie…
(Mais ça, c'est vraiment pour le plaisir de musarder encore un peu parce qu'il est rarissime d'avoir besoin d'une boite de saisie modale ;)

L"extension Adobe Flash Plugin est nécessaire pour afficher ce contenu.

Ensuite nous reprendrons la route par le versant classes liées, où on ne rencontrera rien de bien neuf, si ce n'est… une surprise… :)
Non, je ne dis pas ce que c'est, vous verrez bien. Ça n'a pas à voire avec les classes ce sera le bonus hors pistes.

Les classes
Boites alerte et oui/non mise en œuvre
Boite saisie mise en œuvre

N'oubliez pas, si vous utilisez le paquetage de classes dans un autre répertoire que celui du fla maitre, de préciser le chemin source dans les paramètres de publication

Les classes liées -->