|
|
||
| Tutoriaux : Clignotement d'un clip | ||
|
1. Introduction |
||
|
Tout commence par un courrier électronique que j'ai reçu il y a quelques jours... Voici le problème qui m'a été soumis : "Bonjour, |
||
dt = 1/25; t = 0; alpha = function(t) { return 100*Math.sin(Math.PI*t); } onEnterFrame = function() { monClip._alpha = alpha(t); t += dt; if(t >= 1) {t = 1; dt *= -1;} else {if (t <= 0) {t = 0; dt *= -1;}} } |
||
| 2. Commentaires sur ce message | ||
|
||
| 3. Sur la scène principale | ||
|
Sur la scène principale, placez un clip quelconque (dans les exemples de ce tutoriel il s'agit d'un vulgaire rectangle : je ne me suis pas donné beaucoup de mal...). A l'aide du panneau propriétés, nommez cette occurrence "monClip". Désormais vous êtes prêt(e) : passons à la programmation. Nous voulons faire varier la propriété alpha de ce clip de 0 à 100 de manière linéaire, puis de 100 à 0 et ainsi de suite afin d'obtenir un clignotement. Nous voulons pouvoir faire varier la vitesse (ou la fréquence) de ce clignotement... Réglez la cadence de l'animation à 25 images par seconde. Je vous propose de placer 3 champs de texte dynamiques, nommés respectivement texte0, texte1, texte2 : ceci est facultatif mais vous permettra lors de la publication de l'animation de voir les valeurs de certains paramètres. |
||
| 3. Le code et l'animation obtenue | ||
|
Dans le panneau action de votre animation, placez le code ci-dessous : |
||
|
||
|
||
| 4. Le code avec ses commentaires | ||
|
La différence entre les deux clignotements est très subtile et peut paraître négligeable pour certains d'entre vous. Cependant lorsqu'on cherche un effet précis, il est parfois indispensable de considérer ces petites différences... Au niveau de la programmation toute la nuance réside dans la définition de la fonction alpha... Cette fonction prend un paramètre t qui varie entre 0 et 1 et renvoie des valeurs comprise entre 0 et 100. Des calculs assez simples (pour un prof de maths) montrent que : alpha(0) = v0 Étudions le code ligne par ligne : |
||
| On définit une variable dt qui représente la variation de la variable t entre chaque image. Si dt est grand, le clignotement sera rapide. Pour dt=0, le clignotement sera inexistant. | ||
| dt = 1/25; | ||
| La variable t est initialisée à zéro au début de l'animation. Au cours de l'animation elle prendra des valeurs comprises entre 0 et 1. | ||
| t = 0; | ||
| Nous définissons trois variables que nous pourrons faire varier par la suite pour modifier le clignotement : lire le dernier paragraphe de ce tutoriel. | ||
| v0 = 0; v1 = 100; v2 = 0; |
||
| On définit une fonction numérique nommée alpha : la représentation graphique de cette fonction passe par les points de coordonnées (0 ; v0), (0,5 ; v1) et (1 ; v2). Il ne s'agit pas d'une coïncidence... Sur les deux intervalles [0 ; 0,5] et [0 ; 1] cette fonction est affine. | ||
| alpha = function(t) { if(t < 0.5) return 2*(v1 - v0)*t + v0 else return 2*(v2 - v1)*(t - 0.5) + v1 } |
||
| On affiche dans les trois champs de texte les valeurs de v0, v1 et v2 (que vous pourrez faire varier par la suite). | ||
| texte0.text = "v0 = " + v0; texte1.text = "v1 = " + v1; texte2.text = "v2 = " + v2; |
||
| On définit une fonction qui sera exécutée à chaque image. | ||
| onEnterFrame = function() { | ||
| On règle la transparence de l'occurrence monClip en lui donnant la valeur alpha(t). | ||
| monClip._alpha = alpha(t); | ||
| On ajoute la valeur de dt à la variable t. | ||
| t += dt; | ||
| Si t dépasse la valeur 1, on donne à t la valeur 1 et on change le signe de dt. | ||
| if(t >= 1) {t = 1; dt *= -1;} | ||
| sinon, si t devient plus petit que 0, on donne à t la valeur 0 et on change le signe de dt. Ces lignes de code nous garantissent que la variable t reste toujours comprise entre 0 et 1. | ||
| else {if (t <= 0) {t = 0; dt *= -1;}} | ||
| Fin de la fonction onEnterFrame... | ||
| } | ||
| 5. Pour aller plus loin... | ||
|
||
|
|
Mon problème c'est que les sommets de la courbe de cette fonction sont aplatis, le clignotement n'est donc pas régulier :-( Je cherche une fonction "en dent de scie" mais j'avoue n'avoir pas trouvé grand chose pour l'instant. Donc voici ma question : connaissez-vous le moyen de faire osciller, de façon régulière, une valeur entre 0 et 100 ?
Merci, Pierre-Louis.