Note : ce code peut être allégé par l’emploi de la fonction dist(), qui permet de connaitre la distance entre deux points, et les variables réservées pmouseX et pmouseY qui permettent de conservent les coordonnées en x et y de la souris lors du frame précédent...
// Un code de démo de processing
// Stéphane, septembre 09
// position en x et y de la balle
float bx,by;
// vitesse de la balle sur l'axe x et y
float vx=2,vy=3;
// stocker la position precedente de la souris
int ancien_x=0,ancien_y=0;
// attendre que la souris aie quitté la balle
int attend=0;
void setup(){
size(700,600);
// position de départ alétoire de la balle
bx=random(width);
by=random(height);
// vitesse aléatoire de la balle
vx=random(6)+1;
vy=random(6)+1;
noStroke();
background(0);
}
void draw(){
// déplacer la balle en fonction de sa vitesse
bx=bx + vx;
by=by + vy;
// la balle ricoche si elle atteind les bords
if(bx>width || bx<0){
vx=-vx;
}
if(by>height || by<0){
vy=-vy;
}
// est-ce que la souris est sur la balle ?
if(abs(mouseX-bx)<15 && abs(mouseY-by)<15){
// est-ce que la souris n'était pas déjà dans la zone d'influence ?
// sinon oui ne rien faire
if(attend==0){
vx=(ancien_x-mouseX)+0.5;
vy=(ancien_y-mouseY)+0.5;
vy=-vy;
vx=-vx;
// securite : attendre que la souris aie quitte
// la zone d'influence
attend=1;
}
}
else {
// la boule quitte la zone d'influence, la souris peut être de nouveau active
attend=0;
}
// dessiner la balle avec une couleur différente chaque fois
fill(random(255),random(255),random(255));
ellipse(bx,by,50,50);
// stocker cette position pour le prochain frame
ancien_x=mouseX;
ancien_y=mouseY;
}