|
| |
Script placé sur l'image clé :
MovieClip.prototype.gravite = function(seuil,
vitesse, rebond) {
var coefy = 0;
this._y=40
this.onEnterFrame = function() {
coefy += vitesse;
this._y += coefy;
if (this.hitTest(seuil)) {
this._y = seuil._y;
coefy *= -1;
vitesse += rebond;
}
if (this._y>seuil._y) {
delete this.onEnterFrame;
this._y = seuil._y;
}
};
};
Script placé sur un bouton (ou à la suite du script ci-dessus dans l'image clé en retirant le gestionnaire on(press)) :
on (press) {
balle.gravite(_root.sol, 0.1, 0.1);
balle2.gravite(_root.sol, 0.9, 0.9);
balle3.gravite(_root.sol, 0.9, 0.1);
balle4.gravite(_root.sol, 0.1, 0.9);
}
Précisons que vous devez placer un clip sur la scène qui teste la collision avec le clip qui subit la gravité. Ce dernier doit être nommé (ex. sol).
Il existe plusieurs techniques qui permettent de temporiser une animation mais commençons tout d'abord par expliquer la raison pour laquelle vous aurez parfois besoin de faire appel à une telle technique.
Que doit-on entendre par "temporiser une animation ?
Si vous souhaitez exécuter une ou plusieurs lignes d'instructions à intervalle régulier (ex. toutes les 5 secondes), vous devez faire appel à la fonction setInterval().
Si vous souhaitez exécuter une ou plusieurs lignes d'instructions durant un laps de temps ((ex. durant 30 secondes), vous devez faire appel à la fonction setInterval(). Vous pouvez aussi utiliser le gestionnaire onEnterFrame.
Certains développeurs utilisent la fonction getTimer() de Flash mais sa gestion est moins souple même si elle est plus simple.
L'utilisation de ce gestionnaire permet d'exécuter en boucle les instructions qu'il contient. Vous devez rattacher ce gestionnaire à la scène ou à l'occurrence d'un clip. La rapidité d'execution du code dépend de la cadence de l'animation. Si vous ne détruisez pas ce gestionnaire, l'execution se fera sans fin, même si vous changez d'image (ou d'image clé).
> Méthodologie N° 1: Utilisation du gestionnaire d'évènement onEnterFrame rattaché à la scène.
1. Placez le script ci-dessous sur une image clé de la timeline
_root.onEnterFrame = function() {
aig._rotation += 5;
};
Dans l'exemple ci-dessus, l'occurrence d'un clip intitulée "aig" tourne sans fin de 5° à raison de 30 fois par secondes (tout dépend de la puissance de l'ordinateur qui lit le swf) car la cadence de l'animation est de 30 ips (30 fps).
Si vous souhaitez annuler (arrêter) l'execution de ce gestionnaire, vous devez utiliser la commande "delete". Placez alors ce script sur l'occurrence d'un bouton (ou ailleurs sans le gestionnaire on(press)).
on (press) {
delete _root.onEnterFrame;
}
Remarque : Vous pouvez aussi rattacher ce gestionnaire à l'occurrence d'un clip ou à this, vous n'êtes pas obligés de faire référence à _root.
Le principe consiste à créer une fonction qui va être appelée par setInterval() à intervalle régulier (exprimé en millième de secondes).
L'utilisation de cette fonction est très simple à mettre en oeuvre, cependant, pour un contrôle total de cette technique de temporisation, il vous faudra certaines connaissances plus approfondies de la programmation en général.
> Méthodologie N° 1: Utilisation simplifiée de la fonction setInterval().
Placez le script ci-dessous sur une image clé de la timeline
1. Rédigez la fonction ci-dessous :
function grandir() {
barre._xscale += 2;
}2. Ajoutez à la suite de votre fonction ou dans un autre script, le code ci-dessous :
setInterval(grandir, 5000);
Dans l'exemple ci-dessus, la fonction grandir est appelée (exécutée) toutes les 5 secondes.
L 'inconvénient de cette méthode réside dans le fait que vous ne pouvez pas arrêter l'execution de cette fonction. Vous devez alors opter pour la méthode numéro 2.
> Méthodologie N° 2: Utilisation complète de la fonction setInterval().
Placez le script ci-dessous sur une image clé de la timeline
1. Rédigez la fonction ci-dessous :
function agrandir(occu) {
if (occu._xscale<96) {
occu._xscale += 2;
} else {
clearInterval(lancer);
delete lancer
}
}2. Ajoutez à la suite de votre fonction ou dans un autre script, le code ci-dessous :
if (!lancer) {
lancer = setInterval(agrandir, 100, barre2);
}Dans l'exemple ci-dessus, la fonction agrandir est appelée toutes les 10eme de secondes (1 seconde valant 1000). Elle contient un test qui arrêtera automatiquement son exécution bouclée grâce à clearInterval(). Cette dernière commande nécessite un paramètre ("lancer" dans notre exemple) qui est un identifiant associé à setInterval(). D'où l' association de ce "mot" à la fonction setInterval(). Afin de ne pas exécuter plusieurs fois la fonction setInterval() (au cas où cette ligne d'instruction serait placé dans un gestionnaire associé à un bouton), on doit tester son existence.
Remarque : Si vous deviez ajouter un paramètre à la fonction (comme dans la méthodologie N°2 avec "occu"), pour le préciser au moment de son appel avec la commande setInterval(), ajoutez le à la suite de l'intervalle.
function grandir(pas) {
barre._xscale += pas;
}
setInterval(grandir, 5000,2);
Lorsque vous devez placer de l'interactivité au sein de vos animations, vous pouvez alors demander à l'utilisateur de contrôler le swf avec le clavier ou la souris. Plusieurs techniques sont possibles mais celle des listeners présente l'avantage de limiter l'activité du microprocesseur. Une structure if() dans un _root.onEnterFrame ralentit considérablement votre animation. Vous pouvez alors définir un listener (un objet d'écoute) en dehors du gestionnaire _root.onEnterFrame.
> Méthodologie : Surveiller si la touche "Flèche Droite" du clavier est enfoncée.
1. Placez le script ci-dessous sur une image clé de la timeline
ecouteur = new Object();
ecouteur.onKeyDown = function() {
laTouche = Key.getCode();
if (laTouche==39) {
direction=1
}
Key.addListener(ecouteur);Analysons ensemble ce script :
- Pour commencer, vous devez toujours choisir un nom d'instance de la classe Object(). Dans l'exemple ci-dessus nous avons choisi ecouteur mais nous aurions pu retenir mouchard, oeil, oreille, toto, titi, etc. N'importe quel mot peut convenir à partir du moment où il ne contient ni espace ni caractères accentués.
- Vous attribuez ensuite à ce nom d'instance un évènement (Tout dépend de l'objet que vous voulez surveiller (le clavier (Key), la souris (Mouse), la scène (Stage)). Vous pouvez choisir ... à suivre.
Dans l'exemple ci-dessous, lorsqu'une touche du clavier est enfoncée, un test vérifie s'il s'agit de l'une des 4 touches fléchées.
ecouteur = new Object();
ecouteur.onKeyDown = function() {
laTouche = Key.getCode();
switch (laTouche) {
case 37 :
bete.pasH = -1;
bete.pasV = 0;
break;
case 38 :
bete.pasH = 0;
bete.pasV = -1;
break;
case 39 :
bete.pasH = 1;
bete.pasV = 0;
break;
case 40 :
bete.pasH = 0;
bete.pasV = 1;
}
ecouteur.onKeyUp = function() {
bete.boost = 1;
};
Key.addListener(ecouteur);