[JAVA] Appui simultané sur une touche en traitement

** Introduction **

Pour les super débutants. Vous pouvez également le maintenir enfoncé pendant une longue période.

** Comment faire **

La fonction keyPressed / keyReleased function détermine si chaque touche est enfoncée ou relâchée.

//Stocke l'état d'entrée de chaque clé
boolean right, left, down, up;

void keyPressed() {
  if (keyCode == RIGHT) right = true;
  if (keyCode == LEFT)  left  = true;
  if (keyCode == DOWN)  down  = true;
  if (keyCode == UP)    up    = true;
}

void keyReleased() {
  if (keyCode == RIGHT) right = false;
  if (keyCode == LEFT)  left  = false;
  if (keyCode == DOWN)  down  = false;
  if (keyCode == UP)    up    = false;
}

Le traitement simultané de pression / pression longue peut être effectué avec juste cela. plus tard

python


  if (right) {
    /*Traitement lorsque la touche droite est enfoncée*/
  }
  if (left) {
    /*Traitement lorsque la touche gauche est enfoncée*/
  }
  if (down) {
    /*Traitement lorsque la touche bas est enfoncée*/
  }
  if (up) {
    /*Traitement lorsque la touche haut est enfoncée*/
  }

Vous pouvez diviser le traitement pour chaque clé comme ceci.

Cependant, ce n'est pas très intelligent, nous allons donc gérer l'état d'entrée collectivement avec HashMap.

python


// keyCode(type int)Et son état d'entrée(type booléen)Boutique
HashMap<Integer, Boolean> key = new HashMap<Integer, Boolean>();

void keyPressed() {
  key.put(keyCode, true);
}

void keyReleased() {
  key.put(keyCode, false);
}

De plus, créez une classe KeyState qui gère l'état d'entrée.

KeyState.pde


static class KeyState {
  static HashMap<Integer, Boolean> key;
  
  //Initialisation de l'état d'entrée
  static void initialize() {
    key = new HashMap<Integer, Boolean>();

    key.put(RIGHT, false);
    key.put(LEFT,  false);
    key.put(UP,    false);
    key.put(DOWN,  false);
  }
  
  //Reçoit et met à jour keyCode et son état d'entrée
  static void putState(int code, boolean state) {
    key.put(code, state);
  }
  
  //Reçoit keyCode et renvoie son statut d'entrée
  static boolean getState(int code) {
    return key.get(code);
  }
}

Lors de l'obtention de l'état d'entrée, cela ressemble à ceci

main.pde


void setup() {
  KeyState.initialize();
}

void draw() {
  if (keyState.getState(RIGHT)) {
    /*Traitement lorsque la touche droite est enfoncée*/
  }
  if (keyState.getState(LEFT)) {
    /*Traitement lorsque la touche gauche est enfoncée*/
  }
  if (keyState.getState(DOWN)) {
    /*Traitement lorsque la touche bas est enfoncée*/
  }
  if (keyState.getState(UP)) {
    /*Traitement lorsque la touche haut est enfoncée*/
  }
}

void keyPressed() {
  KeyState.putState(keyCode, true);
}

void keyReleased() {
  KeyState.putState(keyCode, false);
}

Merci pour votre soutien.

en conclusion

La touche de direction est ** keyCode (type int) **, mais Tab et Entrée sont stockées dans ** key (type char) **, donc un autre appareil est requis.

Recommended Posts

Appui simultané sur une touche en traitement
Utiliser MouseListener avec le traitement
Traitement d'écriture dans IntelliJ IDEA
Traitement parallèle mesuré avec Java
Traitement du jugement Mazume dans la pêche
Essayez d'implémenter le traitement asynchrone dans Azure
Traitement de la date en Java (LocalDate: Initialization)
Implémentation du traitement asynchrone dans Tomcat
Technique de self-pipe utile pour le traitement IO.select
Le traitement des événements est effectué au printemps.
A propos du traitement de la copie de fichiers en Java