L'autre face de la lune.
Au nombre de 3, ces événements ne sont pas restreints au clip qui les porte, mais à toute la scène. Il n'y aura donc pas de petite main qui apparaîtra.
Nous allons voir :
- 1. onmousedown
- 2. onmouseup
- 3. onmousemove
1. onMouseDown
Il s'agit de l'équivalent global de
onpress. Où que vous cliquiez dans la scène, cet événement sera appelé.
Code : Actionscript | monclip.onMouseDown = function () {
trace ("Bouton de la souris enfoncé");
}
|
Mais alors, quel est l'intérêt de le faire porter par un clip précis ? Et pas tout simplement le mettre pour _root ?
Aucun.

Sauf peut-être pour la clarté du code quelques fois.
Taper cela revient exactement au même :
Code : Actionscript | _root.onMouseDown = function () {
trace ("Bouton de la souris enfoncé");
}
|
Et si je fais porter cet événement à deux clips à la fois ?
Il suffit de tester :
Code : Actionscript | monclip.onMouseDown = function () {
trace ("onMouseDown appartenant à monclip");
}
_root.onMouseDown = function () {
trace ("onMouseDown appartenant à _root");
}
|
Et vous pourrez constater que la fenêtre de sortie affichera les deux. Les deux sont donc appelés. Évitez tout de même ce genre de code...
2. onMouseUp
onMouseUp est l'équivalent de
onRelease. Il est exécuté lorsque le bouton de la souris est relâché.
Il n'existe pas d'équivalent à
onReleaseOutside pour les événements globaux, dans la mesure où vous pouvez relâcher le bouton de la souris où vous voulez sur scène, ça sera toujours sur scène. Donc
onRelease sera appelé.
3. onMouseMove
En voilà un très intéressant.
Il se déclenche dès que la souris est déplacée ! Même si la souris se déplace seulement de 1 pixel, l'événement sera exécuté ! Donc, de façon presque continue quand on bouge la souris.
Et là, on va pouvoir enfin utiliser un code que je vous avais montré dans les propriétés des clips et qui n'avait qu'une utilité limitée : le code permettant de faire tourner un clip sur lui même de façon à ce qu'il suive un clip.
Changez le clip en souris et vous avez un code qui fait tourner un clip en fonction de la souris.
A savoir : les coordonnées de la souris sur la scène sont données par _xmouse pour l'axe des abscisses et _ymouse pour l'axe des ordonnées.
Le code était :
Code : Actionscript | _root.monclip._rotation = Math.atan2(_root.cible._y-_root.monclip._y, _root.cible._x-_root.monclip._x)/(Math.PI/180);
|
Maintenant, remplaçons les coordonnées du clip cible par les coordonnées de la souris, ce qui nous donne (en supprimant les _root qui ne servent à rien puisqu'on sait qu'on est sur la scène principale) :
Code : Actionscript | monclip._rotation = Math.atan2(_ymouse-monclip._y, _xmouse-monclip._x)/(Math.PI/180);
|
Et maintenant mettons ce code dans un événement
onMouseMove qui va être porté par
_root :
Code : Actionscript | _root.onMouseMove = function() {
monclip._rotation = Math.atan2(_ymouse-monclip._y, _xmouse-monclip._x)/(Math.PI/180);
}
|
Et là, miracle, ça marche.
Maintenant, petit exercice de style (vous savez que je les aime bien

).
Je veux faire la même chose, mais que l'événement
onMouseMove soit porté par le clip
monclip.
Voyez-vous les changements que cela va induire ?
Si vous n'avez pas trouvé, regardez la réponse :
Secret (cliquez pour afficher)Code : Actionscript | monclip.onMouseMove = function() {
this._rotation = Math.atan2(_root._ymouse-this._y, _root._xmouse-this._x)/(Math.PI/180);
}
|
Eh oui, puisque qu'on se place
dans le clip
monclip, on change de référentiel.
On remplace donc
monclip par
this, quant aux coordonnées de la souris, il est conseillé de préciser qu'il s'agit des coordonnées par rapport à la scène
_root, même si cela reste facultatif. En effet, si on ne précise pas à qui appartient un objet, Flash va supposer qu'il appartient non pas au clip qui porte le code, mais au clip dans lequel on a écrit le code.