Je voulais expliquer un peu le fonctionnement du DispatchEvent en Flash (AS2), meme si ca fonctionne quasiment pareil en AS3 et c'est meme beaucoup plus utlisé.
C'est méconnu et pourtant tellement utile ...
Pour trouver de l'aide sur le sujet, allez dans l'aide (pas POSSIBLE) dans ActionScript 2 Components Language Reference>EventDispatcher Class
La technique est simple :
- on initialise la classe sur un objet (un MovieClip par exemple)
- on met un écouteur d'événements
- on met un dispatchEvent qui émet l'événement écouté.
Exemple appliqué a une animation :
Prennons une animation divisé en plusieurs sequences. Je parle ici de sequences comme dans un film et non pas des sequences Flash qui sont caca et qu'il ne faut pas utiliser.
Mettons que ces sequences soient reparties dans des clips.
seq1_mc
seq2_mc
etc ...
Et bien voici un moyen tres simple de les jouer a la suite tout en etant capable de changer le contenu, la duree de chaque clip, ou meme d'intercaller de nouveau clips et d'en enlever.
On importe la classe
import mx.events.EventDispatcher;
on l'initialise sur _global qu'on va utiliser pour tout, c'est plus simple
EventDispatcher.initialize(_global);
On determine une variable qui va permettre de savoir ou en est l'animation
_global.stepNum = 1;
On cree l'objet qui va recevoir les evenements
_global.evli = new Object();
On declare un ecouteur qui appel la fonction "step1" sur l'objet evli
_global.addEventListener("step1", _global.evli);
On definit la fonction step1
_global.evli.step1 = function (evt){
// on rend invisible le clip precedent
seq1_mc.gotoAndStop(1);
// on joue le suivant
seq2_mc.play();
// on incremente pour signaler qu'on est a l'etape suivante
_global.stepNum++;
}
Pour continuer, il suffit de definir les fonctions step2, step3 etc ... et de rajouter les écouteurs idoines.
Ensuite dans vos clips, la premiere image doit etre vide ici ( mais vous pouvez jouer sur la propriete _visible) et avoir un stop().
La derniere image contient
stop();
On envoi un evenement sur _global pour dire que l'etape actuelle est fini et qu'il faut passer a la suivante.
_global.dispatchEvent({type:"step"+_global.stepNum});
Et c'est tout.
Moi je l'utilise surtout pour ce genre de choses, signaler la fin d'un script ou d'une anime.
---------------
Jeu de simulation Boursière - Version BETA - https://www.facebook.com/wildstocks