A › 12 - Événements 2 : clavier

Processing comporte des variables et fonctions qui permettent de connaître la dernière touche activée du clavier. On peut ainsi réagir en fonction des touches activées par l'utilisateur.

L'accès à ces informations nécessite la présence d'une fonction draw() au sein du programme, éventuellement dépourvue d'instruction.

Les variables liées au clavier

  • La variable key contient la dernière touche activée du clavier, si celle-ci fait partie des touches codées en ASCII, c'est à dire les caractères alphanumériques ainsi que les touches BACKSPACE, TAB, ENTER, RETURN, ESC et DELETE.
  • La variable keyPressed est un booléen. Elle vaut true si l'une des touches du clavier est utilisée et false sinon.
  • La variable keyCode est utilisée pour identifier l'appui sur des touches spéciales, absentes du code ASCII : les flèches, désignées par UP, DOWN, LEFT, RIGHT et les touches ALT, CONTROL et SHIFT. La détection de l'usage d'une de ces touches se fait par le test (if key==CODED), la variable keyCode précisant alors laquelle a été utilisée.

Quelques exemples : lorsque l'animation apparaît, cliquer dans la fenêtre de l'animation pour l'activer puis faire usage du clavier.

Avec keyPressed

voir l'animation

void setup(){

  size(250,250);

  noStroke();

}

void draw(){

  background(255); // fond blanc

  if (keyPressed) {

    fill(180, 60, 60) ; // remplissage rouge

  }

  else {

    fill(100, 180, 60) ; // remplissage vert

  }

  ellipse(width/2, height/2, 100, 100);

}

Avec keyPressed et key

voir l'animation

void setup(){

  size(250,250);

  noStroke();

}

void draw(){

  background(255); // fond blanc

  if (keyPressed) {

    if (key==' ' || key=='r') { // teste si la touche Espace ou la touche r est activée

      fill(200, 60, 60) ; // remplissage rouge

    }

    else {

      fill(20, 60, 255) ; // remplissage bleu

    }

  }

  else { // lorsqu'aucune touche n'est activée

    fill(100, 180, 60) ; // remplissage vert

  }

  ellipse(width/2, height/2, 100, 100);

}

Avec keyPressed, key et keyCode

voir l'animation

int x,y; // coordonnées du centre du cercle

void setup(){

  size(250,250);

  background(255); // fond blanc

  noStroke();

  x=width/2;

  y=height/2;

  fill(240,100,100);

}

void draw(){

  if (keyPressed) {

    if (key == CODED) { // teste si la touche activée est une "touche spéciale"

      if (keyCode == RIGHT) { // flèche "droite"

        x=x+1 ; // l'abscisse augmente de 1

      }

      else if (keyCode == UP) { // flèche "haut"

        y=y-1 ; // l'ordonnée diminue de 1

      }

      else if (keyCode == DOWN) { // flèche "bas"

        y=y+1 ; // l'ordonnée augmente de 1

      }

      else if (keyCode == LEFT) { // flèche "gauche"

        x=x-1 ; // l'abscisse diminue de 1

      }

    }

  }

  ellipse(x, y, 5, 5);

}

Les fonctions liées au clavier

  • La fonction keyPressed() est appelée à chaque fois qu'une touche du clavier est activée.
  • La fonction keyReleased() est appelée à chaque fois qu'une touche du clavier est relâchée.

Un exemple : cliquer dans la fenêtre de l'animation pour l'activer puis faire usage du clavier.

boolean bouton1 = true ;

void setup(){

  size(250,250);

}

void draw(){

  background(255);

  if (bouton1) {

    fill(100,180,60); // remplissage vert

    rect (50,100,50,50); // carré gauche

    noFill(); // aucun remplissage

    rect (150,100,50,50); // carré droit

  }

  else {

    fill(180,60,60); // remplissage rouge

    rect (150,100,50,50); // carré droit

    noFill(); // aucun remplissage

    rect (50,100,50,50); // carré gauche

  }

}

void keyPressed() {

  if (key == CODED) { // teste si la touche activée est une "touche spéciale"

    if ((keyCode == RIGHT && bouton1) || (keyCode == LEFT && !bouton1)){ // flèche "droite" et bouton gauche actif OU flèche "gauche" et bouton droit actif

      bouton1 = !bouton1 ; // on inverse le bouton actif

    }

  }

}