A › 8 - Événements 1 : souris

Processing comporte des variables et fonctions qui permettent de connaître la position du pointeur de la souris et les actions réalisées par l'utilisateur à la souris. On peut ainsi réagir en fonction de ces actions.

L'accès à ces informations nécessite la présence d'une fonction draw() au sein du programme et que le pointeur de la souris survole la fenêtre de tracé.

Les variables liées à la souris

  • Les variables mouseX et mouseY donnent l'abscisse et l'ordonnée du pointeur de la souris. A chaque appel de la fonction draw(), ces deux variables sont réactualisées, et les valeurs précédentes sont stockées dans les variables pmouseX et pmouseY.
  • La variable mousePressed peut, comme un booléen, prendre les valeurs true ou false. Elle vaut true si l'un des boutons de la souris est cliqué (et non relaché), et false sinon.
  • La variable mouseButton peut prendre trois valeurs : LEFT, RIGHT ou CENTER, respectivement lorsque les boutons gauche, droit ou central de la souris sont cliqués.

Quelques exemples : lire les programmes puis faire usage de la souris dans les animations :

Avec mouseX et mouseY

voir l'animation

void setup(){

  size(200,200);

  background(40);

  stroke(235);

  noFill();

}

void draw(){

  ellipse(mouseX,mouseY,10,10);

}

Avec mousePressed

cliquer

voir l'animation

void setup(){

  size(200,200);

  background(255);

}

void draw(){

  if (mousePressed){

    fill(17,170,136);

  }

 else{

    fill(244,109,31);

  }

  rect(30,30,100,100);

}

Avec mousePressed et mouseButton

cliquer2

voir l'animation

void setup(){

  size(200,200);

  background(255);

}

void draw(){

  if (mousePressed && (mouseButton==LEFT)){

    fill(200,20,20); // rouge

  }

  else if (mousePressed && (mouseButton==RIGHT)){

    fill(8,160,20); // vert

  }

  rect(30,30,100,100);

  fill(244,109,31); // orange

}

Les fonctions (ou méthodes) liées à la souris

On peut définir des fonctions qui s'exécutent en fonction des actions de l'utilisateur à la souris. L'ordre d'exécution des instructions du programme est alors modifié, la gestion des informations liées à la souris pouvant interrompre ou modifier à tout moment le déroulement du programme.

  • La fonction mouseClicked() est appelée à chaque fois qu'un bouton de la souris est cliqué.
  • La fonction mouseReleased() est appelée à chaque fois qu'un bouton de la souris est relâché.
  • La fonction mouseMoved() est appelée à chaque fois que la souris est déplacée, sans qu'aucun bouton ne soit utilisé.
  • La fonction mouseDragged() est appelée à chaque fois que la souris est déplacée et qu'un bouton est cliqué, et non relâché.
  • La fonction mousePressed() est appelée à chaque fois qu'un bouton de la souris est utilisé.

Avec mouseClicked() et mouseDragged()

voir l'animation

int x,y;

boolean lumiere;

void setup(){

  size(200,200);

  x=width/2;

  y=height/2;

  lumiere=true;

  stroke(200,50,100); // bord rouge

}

void draw(){

  if(lumiere){

   background(255); // fond blanc

    fill(205); // gris sombre

  }

  else {

    background(0); // fond noir

    fill(125); // gris clair

  }

  rect(x-25,y-25,50,50); // carré centré en (x,y)

}

void mouseDragged(){ // si la souris est cliquée et déplacée

  x=mouseX; // on modifie les valeurs qui repèrent le carré tracé dans le draw()

  y=mouseY;

}

void mouseClicked(){ // si la souris est cliquée et non déplacée

  lumiere=!lumiere; // on modifie la valeur de lumiere

}

Avec mouseMoved() et mouseClicked()

attraction diurne

voir l'animation

float x,y;

boolean lumiere;

void setup(){

  size(200,200);

  x=width/2;

  y=height/2;

  lumiere=true;

  stroke(200,50,100); // bord rouge

}

void draw(){

  if(lumiere){

    background(235); // fond gris-blanc

    fill(205); // gris sombre

  }

  else {

    background(0); // fond noir

    fill(125); // gris clair

  }

  ellipse(x,y,50,50); // cercle centré en (x,y)

}

void mouseMoved(){ // si la souris est déplacée sans être cliquée

  if(lumiere) {

    x=x*0.9+0.1*mouseX; // on modifie les coordonnées du centre du cercle tracé dans le draw()

    y=y*0.9+0.1*mouseY;

  }

}

void mouseClicked(){ // si la souris est cliquée et non déplacée

  lumiere=!lumiere; // on modifie la valeur de lumiere

}