Dans le précédent chapitre, nous avons travaillé dans le plan défini par les vecteurs

.
Ce plan correspond à la surface de votre écran (plan bleu ci-dessous).
Mais toutes les considérations géométriques que nous avons vues précédemment sont aussi valides dans d'autres plans.
Prenons par exemple le plan défini par les axes

(le plan vert ci-dessus), et un point de coordonnées (x=100,y=100,z=0) qui servira de nouveau centre à la rotation de notre clip.
On peut très facilement faire tourner notre clip dans ce plan en apportant quelques modifications à notre code.
Comme nous l'avons vu plus haut, ajoutons notre point et modifions les coordonnées de notre clip en fonction des variables de notre point :
Code : Actionscript1
2
3
4
5
6
7
8
9 | var point:MovieClip = new MovieClip();
point.x = 100;
point.y = 100; // J'ai mis 100 pour que notre point ait la même ordonnée que pour 'rotation', j'aurais tout aussi bien pu mettre n'importe quoi d'autre puisque cette variable ne variera pas pour l'instant.
point.z = 100; // Notre clip est maintenant situé juste au-dessus de notre 'centre' de 'rotation'.
var clip:MovieClip = this.attachMovie('boule','mc_boule',1);
clip._x = point.x
clip._y = point.y
// Ici nous n'avons qu'un seul clip, nous n'avons donc pas besoin d'utiliser le 'swapDepths()', mais vous pouvez quand même le mettre si ça vous amuse.
// clip.swapDepths(point.z)
|
Nous devons aussi modifier la fonction
rotation pour qu'elle modifie les variables de notre
point et non plus directement les coordonnées de notre
clip.
Code : Actionscript 1
2
3
4
5
6
7
8
9
10 | function rotation(angle:Number):Void{
var cosAngle:Number = Math.cos(conversion_radians(angle));
var sinAngle:Number = Math.sin(conversion_radians(angle));
var newX:Number = (point.x-centreX)*cosAngle-(point.y-centreY)*sinAngle; // ligne modifiée
var newY:Number = (point.y-centreY)*cosAngle+(point.x-centreX)*sinAngle; // ligne modifiée
point.x = centreX+newX; // ligne ajoutée
point.y = centreY+newY; // ligne ajoutée
clip._x = point.x; // ligne modifiée
clip._y = point.y; // ligne modifiée
}
|
Maintenant, nous voulons que notre
point (et par conséquent aussi le
clip) tourne dans le plan défini par les vecteurs

, autour du point de coordonnées (x=100,y=100,z=0). Modifions notre code en conséquence :
Code : Actionscript 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | function conversion_radians(degre:Number):Number{
return degre/180*Math.PI;
}
function rotation(angle:Number):Void{
var cosAngle:Number = Math.cos(conversion_radians(angle));
var sinAngle:Number = Math.sin(conversion_radians(angle));
var newX:Number = (point.x-centreX)*cosAngle-(point.z-centreZ)*sinAngle; // ligne modifiée (on a remplacé les variables de Y par les variables de Z)
var newZ:Number = (point.z-centreZ)*cosAngle+(point.x-centreX)*sinAngle; // ligne modifiée
point.x = centreX+newX;
point.z = centreZ+newZ; // ligne modifiée
clip._x = point.x;
clip._y = point.y; // Cette ligne n'a pas été modifiée, car dans le repère que nous avons choisi, l'ordonnée de notre clip correspondra toujours à la variable 'y' de notre 'point'. Cette ligne devient donc obsolète pour la rotation dans ce plan (puisque la valeur de 'point.y' ne change pas).
// clip.swapDepths(point.z) // Cette ligne est toujours inutile dans le cas où nous ne gérons qu'un seul clip.
}
var centreX:Number = 100;
var centreY:Number = 100;
var centreZ:Number = 0
var point:MovieClip = new MovieClip();
point.x = 100;
point.y = 100;
point.z = 100;
var clip:MovieClip = this.attachMovie('boule','mc_boule',1);
clip._x = point.x
clip._y = point.y
// clip.swapDepths(point.z)
this.onEnterFrame = function(){
rotation(5)
}
|
À ce stade, si vous testez votre animation, le clip devrait se déplacer sur l'axe

.
Mais bien sûr, la variation de
niveau sur l'axe

n'est pas visible.
Pour la mettre en évidence (et pour vous prouver que votre code marche bien

), il existe une infinité de méthodes, je vous propose donc de modifier la taille de notre clip pour donner un effet de 'loin' ou 'proche'.
À la fin de la fonction
rotation, ajoutez ce code :
Code : Actionscript1
2
3
4 | clip._xscale = point.z + 200
clip._yscale = point.z + 200
// On fait varier la taille (en %) de notre clip en fonction du 'niveau' (qui correspond à la valeur de 'point.z').
// Puisque la valeur de point.z varie entre -100 et 100 (puisqu'on s'est arrangé pour que le clip se situe à 100 du centre et que le centre est au 'niveau' 0 (z=0)), on y ajoute 200 pour obtenir un pourcentage entre 100 (taille normale) et 300 (taille triplée).
|
Alors ? Magnifique, n'est-ce pas ? Nous savons maintenant comment faire tourner notre
point dans 2 plans parallèles. Le faire tourner dans le 3
e plan ne nous posera donc aucun problème (juste quelques modifications du code).
Eh bien, prochaine étape, on combine les rotations.
