[pixLib] - métronome et temporisation
Par Laurent Deketelaere le lundi, novembre 13 2006, 22:51 - Flash plateforme - Lien permanent
Bonjour,
PixLib contient des outils puissants pour la temporisation. Si vous continuez la lecture de ce billet vous ne temporiserez plus vos applications de la même façon.
Le principe de la temporisation dans pixLib est de créer un «métronome» par fréquence, pour éviter une redondance inutile.
A l'origine était IFrameBeacon :
interface com.bourre.transitions.IFrameBeacon { public function start() : Void; public function stop() : Void; public function isPlaying() : Boolean; public function addFrameListener(oL:IFrameListener) : Void; public function removeFrameListener(oL:IFrameListener) : Void; }
Cette interface est implémenté dans trois classes qui définissent trois types temporisations différentes :
FPSBeacon
Envoi l'événement "onEnterFrame" à chaque changement d'image dans l'animation Flash (si le FPS de l'animation est 31, l'événement sera envoyer 31 fois/second).
MSBeacon
Envoi l'événement "onEnterFrame" à un intervalle défini.
FLVBeacon
Permet de s'abonner à un objet VideoDisplay et de recevoir l'événement "onEnterFrame" à chaque changement d'image de la vidéo.
Pour abonner une classe à l'une des ces trois temporisations, il suffit d'implémenter l'interface IFrameListener et de l'abonner à un temporisateur.
import com.bourre.transitions.FPSBeacon; import com.bourre.transitions.IFrameListener; class net.geturl.project.TimeManagerUI implements IFrameListener { public function TimeManagerUI ( Void ) { // -- } public function start( Void ) : Void { FPSBeacon.getInstance().addFrameListener( this ); } public function stop( Void ) : Void { FPSBeacon.getInstance().removeFrameListener( this ); } public function onEnterFrame() : Void { // actions } }
En plus de ces trois classes, pixLib contient deux «Contrôleurs», CommandFPS et CommandMS, ces deux classes permettent de gérer dans le temps l'exécution de commandes.
Delay
CommandFPS et CommandMS permettent de définir un délais avant l'exécution d'une commande. Le code ci-dessous exécutera une seule fois la fonction test après un délai de 3 secondes.
import com.bourre.commands.*; var t:CommandMS = new CommandMS(); function test() : Void { trace('hello world'); } t.delay( new Delegate(this, test), 3000 );
Boucles
Avec ces deux classes ont peut aussi ajouter des commandes dans des boucles, càd qu'à chaque exécution de la méthode "onEnterFrame" les commandes liées au contrôleur sont exécutées. Le code ci-dessous exécutera la fonction test toutes les 3 secondes.
import com.bourre.commands.*; var t:CommandMS = new CommandMS(); function test(s:String) : Void { trace("hello world"); } t.push( new Delegate(this, test), 3000 );
Pour terminer voici la version globale des contrôleurs : CommandManagerFPS et CommandManagerMS. La seule différence avec CommandFPS et CommandMS est que CommandManagerFPS et CommandManagerMS sont des «singletons» et donc unique dans l'application.
Et si vous êtes en manque de tempo, je peux que vous conseiller le dernier Squarpusher, Hello Everything
Bonne soirée
Commentaires
nice post, merci pour le tuto !