Tutoriaux : Effet de masque sur une photo

1. Introduction :

L'objectif de ce tutoriel est de détailler la réalisation de l'animation ci-dessous. Cet effet est basé essentiellement sur l'utilisation de masques sur une photo. Vous voyez 20 occurrences d'un même clip placées dynamiquement sur la scène à l'aide de la fonction attachMovie.

2. Dans la bibliothèque

0) Dans le panneau propriétés du document, définissez une largeur de 400 pixels, une hauteur de 300 pixels et une cadence de 25 images/seconde.

1) Symbole n°1 : le_masque
- Créez un nouveau symbole et nommez-le "le_masque". Sur la scène de ce clip, tracez un carré de 100 pixels de côté et centrez-le (horizontalement et verticalement). Veillez à remplir l'intérieur de ce carré à l'aide d'une couleur quelconque.

2) Symbole n°2 : la_photo
-  Créer un nouveau symbole et nommez-le "la_photo".
- Sur la scène de ce clip, importez la photo crane.jpg, centrez-la verticalement et horizontalement.
- Insérer un nouveau calque au dessus du calque précédent et placez une occurrence du symbole "le_masque" sur la scène : nommez cette occurrence"masque_mc" afin que l'on puisse modifier par la suite les propriétés de cette occurrence à l'aide du code.
- Modifier les propriétés des deux calques : le calque supérieur doit être un masque alors que le calque inférieur doit être masqué. En verrouillant les deux calques, vous ne devriez voir que la partie centrale de la photo.
- Dans le panneau propriétés de liaison du symbole "la_photo", cochez la case "Exporter pour ActionScript" et modifiez l'identifiant en saisissant le nom "photo_mc".

Avertissement : les débutants veilleront à ne pas confondre différents noms. En effet, "le_masque" est le nom du symbole n°1 dans la bibliothèque alors que "masque_mc" est le nom (de code) d'une occurrence du symbole n°1 placé dans la scène principale d'un clip... je suis certain de ne pas être clair ! N'hésitez pas à me le confirmer en m'écrivant. De même, le nom "la_photo" est un nom quelconque qui vous permet de mieux vous y retrouver dans l'organisation des symboles de votre bibliothèque. "photo_mc" est en revanche un nom qui interviendra dans la partie programmation : sa syntaxe devra être respectée rigoureusement, on pourrait dire qu'il s'agit du nom de code du symbole n°2.

3. Le code

Ci-dessous l'intégralité du code de cette animation à placer dans le calque action de la première et seule image de la scène principale.

nbr = 20;
x0 = 200;
y0 = 150;
hauteur = 260;
largeur = 350;
amplitude = 10;
angle = 0;
dangle = 2*Math.PI/50;
 
for(var i = 0; i < nbr; i++) {
var mc = attachMovie("photo_mc", "photo_mc" + i, i);
mc._x = x0;
mc._y = y0;
mc.masque_mc._width = largeur*(1 - i/nbr);
mc.masque_mc._height = hauteur*(1 - i/nbr);
mc.angle0 = i*2*Math.PI/nbr;
mc.onEnterFrame = deplacement;
}
 
function deplacement() {
this._x = x0 + amplitude*Math.cos(angle + this.angle0);
}
 
onEnterFrame = function() {
angle += dangle;
}
 
3. Le code avec ses commentaires
 
Indique le nombre de clips qui seront superposés. Par la suite nous placerons dynamiquement sur la scène 20 occurrences du symbole qui s'apelle "la_photo" dans la bibliothèque
nbr = 20;
 
Coordonnées du centre de la scène : les 20 occurrences oscilleront autour du point de coordonnées (x0 ; y0)
x0 = 200;
y0 = 150;
 
Dimension de la photo en pixels
hauteur = 260;
largeur = 350;
 
Amplitude maximale du déplacement horizontal
amplitude = 10;
 
Initialisation de la variable angle
angle = 0;
 
Vitesse angulaire : cette variable permettra de définir la fréquence des oscillations
dangle = 2*Math.PI/50;
 
Début d'une boucle : le nombre entier i varie de 0 à nbr - 1
for(var i = 0; i < nbr; i++) {
 
On place dynamiquement les photos sur la scène principale
var mc = attachMovie("photo_mc", "photo_mc" + i, i);
 
Les photos sont placées au point de coordonnées (x0 ; y0)
mc._x = x0;
mc._y = y0;
 
On définit les dimensions du masque de chaque photo :
_width et _height sont respectivement la largeur et la hauteur du clip
mc.masque._width = largeur*(1 - i/nbr);
mc.masque._height = hauteur*(1 - i/nbr);
 
On définit pour chaque photo une variable qui s'appelle angle0 : il s'agit d'un angle de déphasage
mc.angle0 = i*2*Math.PI/nbr;
 
Appel de la fonction deplacement à chaque image du clip photo
mc.onEnterFrame = deplacement;
 
Fin de la boucle for
}
 
Définition de la fonction déplacement
function deplacement() {
 
L'abscisse de la photo oscille entre x0 - amplitude et x0 + amplitude
this._x = x0 + amplitude*Math.cos(angle + this.angle0);
 
fin de la fonction déplacement
}
 
Fonction exécutée à chaque image de la scène principale
onEnterFrame = function() {
 
On ajoute la valeur dangle à la variable angle. Ce bout de code équivaut à : angle = angle + dangle
angle += dangle;
 
fin de la fonction
}

4. Quelques variations

Il est ensuite facile de réaliser des modifications de cette animation : changer les valeurs numériques des variables nbr, amplitude et/ou dangle permet d'obtenir des effets complètement différents. Attention : l'augmentation de nbr risque de demander trop de calculs à votre ordinateur, soyez raisonnable !

On peut évidemment ajouter des glissières pour permettre à l'internaute de modifier lui même ces paramètres... Il s'agit de l'animation suivante.

Selon la photo et l'effet recherché, il est préférable de prendre un masque circulaire ou triangulaire : laissez libre cours à votre imagination débordante !

Modifications de la fonction "deplacement"

Liens

Pour des oscillations verticales :

function deplacement() {
this._y = y0 + amplitude*Math.cos(angle + this.angle0);
}

  
  

Pour des oscillations sur une diagonale : (ce code n'est pas optimisé mais il me semble que pour un tutoriel, il a le mérite d'être clair...)

function deplacement() {
this._x = x0 + amplitude*Math.cos(angle + this.angle0);
this._y = y0 + amplitude*Math.cos(angle + this.angle0);
}

 
 

Pour une rotation des images :

function deplacement() {
this._x = x0 + amplitude*Math.cos(angle + this.angle0);
this._y = y0 + amplitude*Math.sin(angle + this.angle0);
}

   
Pour obtenir un peu plus d'interactivité on peut faire varier les valeurs numériques des paramètres "amplitude" et "dangle" à l'aide de glissières.