Le Blog de SamsamTS

Dompter Flash

Qui n'a jamais rêver pouvoir modifier le framerate de son animation en cours d'exécution et que celui-ci soit précis ? Ou encore de réaliser de longs calculs sans que le fatidique message "Un script ralentit l'exécution de Flash Player..." ne s'affiche ?

Le package que je suis entrain de développer est, entre autre, dans ce but.

Comme vous vous en doutez, Flash ne se laisse pas dompter si facilement. Cela demande du temps et beaucoup de réflexion.
Les premiers résultats que j'ai pu obtenir sont très encourageant.

Contrôle du framerate
Le Flash Player 8 est nécessaire pour visualiser cette animation.
Cela est réalisé de manière très simple :

Code :

import com.samsamts.AnimationCtrl.*;
Animation.SetFrameRate(50); // Définit le framerate de l'animation.
AnimationClip.ConvertMovieClip(monMovieClip); // Convertit un mc en AnimationClip


Boucles
Le Flash Player 8 est nécessaire pour visualiser cette animation.
Une boucle est réalisée comme ceci :

Code :

import com.samsamts.AnimationCtrl.Animation;
Animation.SetFrameRate(30); // Doit être appelé au moins une fois

import com.samsamts.Utils.*;
import com.samsamts.Events.EventHandler;

//Loop(start:Number, end:Number, step:Number, handler:EventHandler)
var loop = new Loop(1,10000,1,new EventHandler(this, calcul));
loop.Start() // Lance la boucle

function calcul(loop:Loop, args:LoopEventArgs)
{
   // args.Current : position courante
   // loop.Break() : stoppe la boucle
}


Voilà j'ai l'horreur...hum hum...l'honneur de vous présenter mon package version 0 :mrgreen:

C'est pas encore parfait ni complet (d'autres classes sont à venir) mais j'aimerai déjà avoir quelques retours avant de continuer plus.

Vos commentaires

Le mercredi 15 mars 2006 à 08:57 , commentaire par ekameleon :: #

 

Hello :)

Manque un peu de documentation ;) Sinon cela à l'air intéressant. J'ai toujours du mal sur tes notations des méthodes ou des packages qui commencent par des majuscules (comme en C# je pense) mais c'est pas bien grave ;)

Je regarderai cela de plus prêt dès que j'ai un peu de temps , mais pour le moment à ce que j'en ai vu c'est pas encore très étendu, on va voir la suite !  8)

Merci de nous faire partager ton travail en tout cas.

EKA+ :)

 

Le mercredi 15 mars 2006 à 22:42 , commentaire par Philippe :: #

 

J'aime bien la classe Loop, et les évènements Event. Par contre "com.samsamts" c'est long...

En tout cas le code est plutôt propre quoique peu commenté... Le constructeur de la classe Loop par exemple mériterai un peu de doc ;)

Concernant les majuscules sur les méthodes et propriétés publiques (comme en C#) je trouve que c'est pas si mal - c'est marrant qu'avec tout le C# que je fais je n'ai pas (encore) pris cette habitude  :D

Cela dit je ne vois pas l'intérêt de rajouter encore "m_" devant les propriétés privées, et il y a aussi des "$" dans d'autres classes.

Bref, c'est du bon :bravo:
Et n'écoute pas trop EKA, fait juste ce qu'il faut, mais bien !

 

Le jeudi 16 mars 2006 à 10:18 , commentaire par SamsamTS :: #

 

Ouaip il faut que je documente un peu tout ca, c'est sur.

Pour les "m_" c'est une habitude, cela permet de facilement avoir la liste des membres avec l'autocompletion puisqu'ils sont tous regroupés lors d'un tri alphabétique ;)
Les "$" je l'utilise pour les membres statiques.

J'ajouterai également que ce n'est pas un framework, mon but comme je l'ai dis c'est de pouvoir mieux contrôler les animations. Le contrôle du framerate est fiable et lorsque des frames sont perdues (ça on ne peux rien y faire, ça arrivera toujours) on le sait et l'on peut agir en conséquence. Par exemple la classe AnimationClip va lire 2 frames au lieu d'une si une frame est perdue  8)

Evidemment ça ne fait pas de miracles non plus, si une animation rame ben elle ramera toujours, mais au moins son exécution prendra toujours le même laps de temps (la marge d'erreur est beaucoup moins grande). Attention quand même à ne pas trop lui en demander.

L'autre but est de pouvoir effectuer un certain nombre d'actions simultanément un peu à l'image des threads (attention ce n'est PAS des threads). C'est la classe Scheduler qui répartit le temps de travail mais il est important de comprendre qu'elle ne peut pas interrompre une action lancée, c'est à l'action elle même de vérifier qu'elle ne dépasse pas le temps qui lui a affecté et de rendre la main le cas échéant (comme le fait la classe Loop). Si ceci est respecté le message "Un script ralentit l'exécution de Flash Player..." ne devrait pas s'afficher.

Voilà j'espère que vous avez mieux compris ma réflexion.

Je fini par un problème que j'ai rencontré. Lorsqu'une frame dans un clip possède du code (par exemple un this.stop()), ce code n'est pas exécuté immédiatement lors d'un goto sur celle-ci. Cela pose problème puisque le moment où ce code est exécuté on est peut-être déjà passé à la frame suivante. Je suis entrain de mettre en place une alternative pour pouvoir associer du code à des frames spécifiques.

Merci pour les retours  :D

 

Le samedi 25 mars 2006 à 12:00 , commentaire par kiroukou :: #

 

Salut,
Juste pour te donner un petit coup de pouce concernant ta dernière idée, il me semble bien qu'Animation Package avait qq chose dans le genre, mettre des actions à certaines frames.

Autrement je suis désolé, mais je n'ai pas encore regardé ton package. Je regarderai ça au moment ou j'en aurai le besoin. Mais juste à propos de l'idée et de la classe Loop, j'aime bien :mrgreen:

 

Le samedi 25 mars 2006 à 12:46 , commentaire par SamsamTS :: #

 

Je viens juste pour dire que ça avance, doucement mais surement :)

Pour les actions aux frames spécifiques j'ai rajouter une méthode SetActionAtFrame(numero_frame, fonction).

Sinon dans la continuité de la classe Loop, une classe CommandList qui permet d'enchainer des actions les une après les autres est en préparation. Elle dépendra également de la classe Scheduler.

Je prépare également des exemples d'utilisation pour mieux comprendre comment cela fonctionne  :D

A bientôt.

 

Le vendredi 23 juin 2006 à 02:03 , commentaire par flashspeed :: email :: #

 

salut sam bien ce tutto , mais un peu pauvre en explication pour les neophites comme moi c vrai.
merci tu m'as donné ton aide quelques fois sur le forum.
la je dois faire une carte de france interactive en flash bon bon courage à tous bye

 

Le jeudi 12 octobre 2006 à 15:53 , commentaire par speedake :: #

 

bonjour,
J'écris pour la premier fois sur ton blog, j'ai découvert ce site en cherchant une solution à un problème que beaucoup doivent connaître en flash : comment faire pour que une animation reste rapide et fluide sur Firefox (et ds une moindre mesure IE). J'ai commencé à regarder pour utiliser ton package (déjà chapeau tu maitrise vraiment bcp je débute moi et j'y comprend pas grand chose) et il marche à merveille pour les mc mais pas contre je sais pas si il me permettrait de fluidifié mes animations qui découle de calcul en AS (jet d'une balle)? En tout cas chapeau t'es un maître pour moi (prend moi en paddawan ;-) )
a bientôt j'espère ++

 

Le mardi 21 novembre 2006 à 14:23 , commentaire par orangers :: email :: #

 

salut,
je suis très intérressé par le changement de frameRate
j'arrive bien à importer le script as selon le code que tu as fourni
(import com.samsamts.AnimationCtrl.*;
Animation.SetFrameRate(50); // Définit le framerate de l'animation.
)
que je place sur la première image.

Pourtant rien ne change qq soit la cadence que je demande ?!?

any clue ? merci

 

Le mardi 21 novembre 2006 à 17:58 , commentaire par SamsamTS :: #

 

Tu es bien sur d'avoir convertit le clip en AnimationClip ?

J'ai mis 2 exemples en ligne :
Exemple1 Exemple2

 

Le mercredi 22 novembre 2006 à 17:13 , commentaire par orangers :: email :: #

 

ça y est ça marche. merci
mais il faut que l'anim soit dans un clip !
damned je travaille sur des anims interactives où tout est programmé à la racine de l'anim.
Je charge les anims par loadMovieNum. ça ne marcherait pas avec les "_level" aussi par hazard ? j'ai fait un test sans résultat.

 

Le mercredi 22 novembre 2006 à 19:33 , commentaire par SamsamTS :: #

 

J'avoue que je n'ai essayer ni sur des level ni sur le root.

Quoiqu'il en soit, avant de convertir un movieClip (le root et les level sont des movieClip d'ailleurs) en AnimationClip, il faut attendre qu'il soit chargé et initialisé.

 

Le lundi 23 avril 2007 à 01:10 , commentaire par Tim :: email :: #

 

Salut!

Félicitations! C'est absolument génial! Loind'être un expert, je suis moi-même confronté à ce problème de changement de cadence, et j'avoue que tes lignes de code me permettent enfin de voir le jour!

Bravo et continue comme ça! :-)
:bravo:

 

Ajouter un commentaire