Fonction pour creer de multiples timers

cs_Yode Messages postés 30 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 25 avril 2009 - 24 avril 2009 à 19:10
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 - 24 avril 2009 à 21:32
Bonjour,

J'ai décidé de tenter de faire (enfin!) une animation sans utiliser la timeline de Flash.

Premier obstacle : je veux faire apparaître les éléments de la page l'un après l'autre. Pour cela donc, bien entendu, je me tourne naturellement vers les timers. Voilà donc la forme que commence à prendre le script :

=================================
function intro() { // on lance juste cette fonction qui va créer les différents timers
    var logoTimer:Timer=new Timer(1000,1); // premier timer qui lance des anims au bout d'1s
    logoTimer.addEventListener("timer", e_logoIn);
    logoTimer.start();
    var homeTimer:Timer=new Timer(2000,1);// second timer qui lance des anims au bout de 2s
    homeTimer.addEventListener("timer", e_homeIn);
    homeTimer.start();
    var produitTimer:Timer=new Timer(4000,1);// troisième timer qui lance des anims au bout de 4s
    produitTimer.addEventListener("timer", e_produitIn);
    produitTimer.start();
}
function e_logoIn(e:Event):void {//apparition des premiers éléments
    var introLogo:Tween=new Tween(fondLogo,"alpha",Regular.easeOut,0,1,2,true);
    var introFondGris:Tween=new Tween(fondGris,"alpha",Regular.easeOut,0,1,1,true);
    var introFondCourbes:Tween=new Tween(fondCourbes,"alpha",Regular.easeOut,0,1,5,true);
}
function e_homeIn(e:Event):void {// etc...
    var introModele:Tween=new Tween(homeModele,"alpha",Regular.easeOut,0,1,2,true);
    var introTitre:Tween=new Tween(homeTitre,"alpha",Regular.easeOut,0,1,3,true);
    var introBaseline:Tween=new Tween(homeBase,"alpha",Regular.easeOut,0,1,4,true);

}
function e_produitIn(e:Event):void {// etc.....
    var introProduit:Tween=new Tween(homeSt70,"alpha",Regular.easeOut,0,1,3,true);
    var introDecouvrez:Tween=new Tween(btn_decouvrez,"alpha",Regular.easeOut,0,1,5,true);
}
=============================

J'ai donc fini par me demander si il n'y avait pas moyen de définir une fonction permettant de faciliter la rédaction et d'alleger le code.

Je suis donc parti sur ce code, qui ne fonctionne évidemment pas du tout, je vous mets même pas la tonne d'erreurs que Flash me sort en export (sauf si vous y tenez mais je pense que pour les codeurs chevronnés les aberrations vont être évidentes) :

=============================
function createTimer(timerName:String,speed:uint,repeat:uint,fonction:String):void {
    timerName:Timer=new Timer(speed,repeat);
    timerName.addEventListener("timer", fonction);
    timerName.start();
}
=============================

Et je l'appelle avec par exemple :

=============================
createTimer(produitTimer,4000,1,e_logoIn);
=============================

Ma question est donc de savoir si une telle fonction est faisable, et si oui, comment ? Suis-je au moins sur la bonne voie ?

Merci d'avance !

3 réponses

cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
24 avril 2009 à 21:08
Bonsoir,

effectivement, ca doit générer un paquet d'erreurs :o)

function createTimer(timerName:String,speed:uint,repeat:uint,fonction:String):void {
    timerName:Timer=new Timer(speed,repeat); // tu ne peux pas creer une variable a partir d'une variable...
    timerName.addEventListener("timer", fonction); fonction doit être... une fonction et tu lui transmet une chaine de caractères
    timerName.start();
}

pas sur que cela fonctionne mais part plutot sur quelquechose comme ceci

function createTimer(speed:uint,repeat:uint,callBack:function):void {

    var timerName:Timer=new Timer(speed*1000,repeat);

    timerName.addEventListener("timer", callBack);

    timerName.start();

}

createTimer(4,1,e_logoIn);

se serait sans doute aussi utile de détruire le timer créer une fois le timer terminé... sinon tu va encombrer la mémoire, mais c'est une autre histoire

@+
0
cs_Yode Messages postés 30 Date d'inscription lundi 24 mars 2003 Statut Membre Dernière intervention 25 avril 2009
24 avril 2009 à 21:22
Okay, merci bien !

J'ai fait u test rapide avec le code que tu donne, mais ça ne semble pas marcher.
Je suis pour le moment parti sur une solution en mixant l'appel de timers et l'enchainement de tweens avec des fonctions du type de :
introFond.addEventListener(TweenEvent.MOTION_FINISH, e_homeOut);

Mais dès que j'aurai du temps je me replongerai dans ma fonction de génération de timers, j'ai bien envie de tirer ça au clair !

Merci encore pour cette piste, j'ai au moins pu voir à quel point j'étais à côté de la plaque :p
0
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
24 avril 2009 à 21:32
Bien !

pour info, c'est plutot ceci (utilisation d'un timerEvent

function createTimer(speed:uint,repeat:uint,callBack:function):void {
    var timerName:Timer=new Timer(speed*1000,repeat);
    timerName.addEventListener(TimerEvent.TIMER, callBack);
    timerName.start();
}

et

function e_logoIn(e:TimerEvent=null):void {//apparition des premiers éléments ...}

createTimer(4,1,e_logoIn);

@+
0
Rejoignez-nous