Accéder aux évènements dans une classe

De Centre de Ressources Numériques - Labomedia
Aller à : navigation, rechercher

Processing permet d'accéder aux évènements dans une classe afin de rendre le code plus lisible et de créer nos propres librairies.

Bouton b1, b2;

void setup() {
  size(600, 600);
  b1 = new Bouton(this, width / 2, height / 2);
  b2 = new Bouton(this, 100, 100);
}

void draw() {
}

public class Bouton {
  PApplet parent;
  PVector position;
  int taille;
  boolean etat;
  color couleur;

  public Bouton (PApplet _parent, int _x, int _y) {
    parent = _parent;
    position = new PVector(_x, _y);
    taille = 40;
    etat = false;
    couleur = color(255, 0, 0);
    parent.registerMethod("draw", this);
    parent.registerMethod("mouseEvent", this);    
    parent.registerMethod("keyEvent", this);
  }

  void draw() {
    if (etat) {
      fill(couleur);
    } 
    else {
      fill(255);
    }
    rect(position.x, position.y, taille, taille);
  }

  void mouseEvent(processing.event.MouseEvent event) {
    int x = event.getX();
    int y = event.getY();

    switch (event.getAction()) {
    case MouseEvent.PRESS:
      if ((x > position.x) && (x < position.x + taille) && (y > position.y) && (y < position.y + taille)) {
        etat = !etat;
      }
      int boutonSouris = event.getButton();
      break;
    case MouseEvent.RELEASE:
      // Routine ...
      break;
    case MouseEvent.CLICK:
      // Routine ...
      break;
    case MouseEvent.DRAG:
      // Routine ...
      break;
    case MouseEvent.MOVE:
      // Routine ...
      break;
    case MouseEvent.WHEEL:
      // Routine ...
      break;
    }
  }

  void keyEvent(processing.event.KeyEvent event) {
    switch (event.getAction()) {
    case KeyEvent.PRESS:
      if (event.getKey() == ' ') {
        // Routine ...
      }
      if (event.getKeyCode() == UP) {
        // Routine ...
      }
      break;
    case KeyEvent.RELEASE:
      if (event.getKey() == ' ') {
        // Routine ...
      }
      if (event.getKeyCode() == UP) {
        // Routine ...
      }
      break;
    case KeyEvent.TYPE:
      // Routine ...
      break;
    }
  }
}