- // Variables de mouvement
- var rayon = 100;
- var vitesse = 5;
- var rotation = vitesse/rayon;
-
- // Evènement :
- var onEnterFrame = undefined;
- var pause = false;
- onMouseUp = function () {
- Objectif._x=_xmouse, Objectif._y=_ymouse;
- onEnterFrame = function () {
- if (!pause)
- rejoindre(Voiture, Objectif);
- };
- };
-
- // Fonction qui fait tout !
- function rejoindre(mc, pt)
- {
- // Recueille les coordonnées relatives de la cible.
- var Cible = new Object();
- Cible.x=pt._x, Cible.y=pt._y;
- Objectif._parent.localToGlobal(Cible);
- mc.globalToLocal(Cible);
- // Analyse la position de la cible.
- var distance = Cible.x*Cible.x+Cible.y*Cible.y;
-
- // _________________________________________________________________
- // Trois cas possibles en fonction de la position voiture/cible.
- if (Math.abs(Cible.y)<5 and Cible.x>0) {
- // La cible est droit devant.
- avancer(mc, vitesse);
- }
- else if (Math.abs(Cible.y)<5 and Cible.x>-rayon) {
- // La cible est juste derrière.
- avancer(mc, -vitesse);
- }
- else if (distance<2*rayon*Math.abs(Cible.y)) {
- // La cible est juste à coté de la voiture
- // (dans les deux cercles) : il faut reculer.
- tourner(mc, Cible.y>0);
- avancer(mc, -vitesse);
- }
- else if (Cible.x>0) {
- // La cible en avant de la voiture : il faut tourner pour l'atteindre.
- tourner(mc, Cible.y>0);
- avancer(mc, vitesse);
- }
- else if (distance<rayon*rayon*2) {
- // La cible est arrière de la voiture : il faut faire demi-tour.
- tourner(mc, Cible.y<0);
- avancer(mc, -vitesse);
- }
- else {
- // La cible est en arrière de la voiture : il faut faire demi-tour.
- tourner(mc, Cible.y>0);
- avancer(mc, -vitesse);
- }
- // On arrête de bouger si on a atteint l'objectif.
- if (distance<25*25) {
- this.onEnterFrame = undefined;
- affiche = " Arrêt des moteurs";
- }
- }
- // Fonction outils :
- function avancer(mc, distance) {
- // On peut avancer d'une distance positive ou négative.
- mc._x += distance*Math.cos(mc._rotation*Math.PI/180);
- mc._y += distance*Math.sin(mc._rotation*Math.PI/180);
- }
- function tourner(mc, sens) {
- // "sens" est un booléen indiquant si il faut tourner dans le sens positif.
- mc._rotation += (sens ? 1 : -1)*rotation*180/Math.PI;
- }
// Variables de mouvement
var rayon = 100;
var vitesse = 5;
var rotation = vitesse/rayon;
// Evènement :
var onEnterFrame = undefined;
var pause = false;
onMouseUp = function () {
Objectif._x=_xmouse, Objectif._y=_ymouse;
onEnterFrame = function () {
if (!pause)
rejoindre(Voiture, Objectif);
};
};
// Fonction qui fait tout !
function rejoindre(mc, pt)
{
// Recueille les coordonnées relatives de la cible.
var Cible = new Object();
Cible.x=pt._x, Cible.y=pt._y;
Objectif._parent.localToGlobal(Cible);
mc.globalToLocal(Cible);
// Analyse la position de la cible.
var distance = Cible.x*Cible.x+Cible.y*Cible.y;
// _________________________________________________________________
// Trois cas possibles en fonction de la position voiture/cible.
if (Math.abs(Cible.y)<5 and Cible.x>0) {
// La cible est droit devant.
avancer(mc, vitesse);
}
else if (Math.abs(Cible.y)<5 and Cible.x>-rayon) {
// La cible est juste derrière.
avancer(mc, -vitesse);
}
else if (distance<2*rayon*Math.abs(Cible.y)) {
// La cible est juste à coté de la voiture
// (dans les deux cercles) : il faut reculer.
tourner(mc, Cible.y>0);
avancer(mc, -vitesse);
}
else if (Cible.x>0) {
// La cible en avant de la voiture : il faut tourner pour l'atteindre.
tourner(mc, Cible.y>0);
avancer(mc, vitesse);
}
else if (distance<rayon*rayon*2) {
// La cible est arrière de la voiture : il faut faire demi-tour.
tourner(mc, Cible.y<0);
avancer(mc, -vitesse);
}
else {
// La cible est en arrière de la voiture : il faut faire demi-tour.
tourner(mc, Cible.y>0);
avancer(mc, -vitesse);
}
// On arrête de bouger si on a atteint l'objectif.
if (distance<25*25) {
this.onEnterFrame = undefined;
affiche = " Arrêt des moteurs";
}
}
// Fonction outils :
function avancer(mc, distance) {
// On peut avancer d'une distance positive ou négative.
mc._x += distance*Math.cos(mc._rotation*Math.PI/180);
mc._y += distance*Math.sin(mc._rotation*Math.PI/180);
}
function tourner(mc, sens) {
// "sens" est un booléen indiquant si il faut tourner dans le sens positif.
mc._rotation += (sens ? 1 : -1)*rotation*180/Math.PI;
}