B › 7 - Animation

Rebond(s)

Voici un programme qui permet de voir une balle osciller sur une partie de la fenêtre. Observer le code et l'animation.

int x,y; // coordonnées du centre de la balle

int pas = 1; // variable qui permet de modifier x

void setup(){

  size(200,200);

  noStroke();

  x=width/4; // abscisse de départ de la balle

  y=height/3; // ordonnée de départ de la balle

}

void draw(){

  fill(155,25,35,20); // rouge avec transparence légère : modifiez le paramètre 20 pour voir son influence

  rect(0,0,width, height); // on recouvre la fenêtre d'un rectangle semi-transparent

  fill(255); // blanc

  ellipse (x,y,30,30); // dessin de la balle

  x=x+pas; // chaque exécution de draw() modifie la valeur de x

  if (x>=3*width/4) { // i l'on atteint les trois quarts de la largeur

    pas = -1; // on change le sens de progression

  }

  else if (x<=width/4){

    pas = 1; // on change le sens de progression

  }

}

Modifier le programme précédent pour que la balle "rebondisse" aussi bien en touchant le bord gauche que le bord droit de la fenêtre.

On peut bien évidemment modifier simultanément l'abscisse et l'ordonnée de la balle à chaque exécution du draw()

Voici une partie du code de l'animation : compléter le code et l'exécuter.

int x,y; // coordonnées du centre de la balle

int pasHorizontal = 1; // variable qui permet de modifier x

int pasVertical = 2; // variable qui permet de modifier y

void setup(){ // inchangé par rapport au programme précédent

  size(200,200);

  noStroke();

  x=width/4; // abscisse de départ de la balle

  y=height/3; // ordonnée de départ de la balle

}

void draw(){

  fill(155,25,35,20); // rouge avec transparence légère

  rect(0,0,width, height); // on recouvre la fenêtre d'un rectangle semi-transparent

  fill(255); // blanc

  ellipse (x,y,30,30); // dessin de la balle

  x=x+pasHorizontal; // chaque exécution de draw() modifie la valeur de x

  y=y+pasVertical; // chaque exécution de draw() modifie la valeur de y

  if (x ... à compléter ...) { // si la balle atteint le bord droit ou le bord gauche

    pasHorizontal = -pasHorizontal; // on change le sens de progression horizontale

  }

  if (y ... à compléter ...) { // si la balle atteint le bord haut ou le bord bas

    pasVertical = -pasVertical; // on change le sens de progression verticale

  }

}