Ottieni codice chiave e modificatori chiave sulla pressione dei tasti

Quando un utente preme una combinazione di tasti, ho bisogno di ottenere il codice della chiave e quali tasti modificatori ( Ctrl , Alt , Shift ecc.) Sono attualmente premuti, e scegliere una reazione appropriata basata su quella. C’è un modo più pulito per fare questo rispetto al seguente? (usando InputProcessor # keyDown ):

 public boolean keyDown(int keycode) { boolean ctrl, alt, shift, ...; if (Gdx.input.isKeyPressed(Input.Keys.LEFT_SHIFT) || Gdx.input.isKeyPressed(Input.Keys.RIGHT_SHIFT)) { shift = true; } else if (/* same for ctrl */) { ctrl = true; } else /* same for other modifiers */ { //... } // Finally, choose an action based on the key combination pressed if (shift && keycode == Input.Keys.A) { // What to do if Shift+A is pressed } else if (/* and so on */) { //... } } 

Vedo che ci sono le Input.Keys.META_* digitazione Input.Keys.META_* , che sono probabilmente ciò di cui ho bisogno, ma non ho trovato alcun esempio su come usarle.

È ansible utilizzare il metodo keyDown() per rilevare se lo spostamento (o qualsiasi altro tasto modificatore) viene premuto e il metodo keyUp() se viene rilasciato di nuovo:

 class MyInputProcesses extends InputProcesses { boolean shift = false; // etc... public boolean keyDown(int keycode) { switch(keycode) { case Input.Keys.LEFT_SHIFT : case Input.Keys.RIGHT_SHIFT: shift = true; break; case Input.Keys.A: if(shift) { // Do something if Shift+A is pressed } break; } // etc... } public boolean keyUp(int keycode) { switch(keycode) { case Input.Keys.LEFT_SHIFT : case Input.Keys.RIGHT_SHIFT: shift = false; break; // etc... } } } 

L’approccio ti impedisce di chiedere gli stati dei tasti modificatori ed è più facile modificare i trigger per queste chiavi (ad esempio, accetta solo lo spostamento a sinistra).

Immagino che questa soluzione sia migliore / più bella delle preferenze personali. Dubito che questo sarà qualsiasi (evidente) più veloce.

puoi semplicemente scorrere le chiavi e ad esempio aggiungere a un array e quindi puoi semplicemente verificare in array se la combinazione corretta è ora utilizzata

  //definition of array Array buttons = new Array(); ... //now in render buttons.clear(); for(int i = 0; i < 256; i++) if( Gdx.input.isKeyPressed( i ) ) buttons.add( Input.Keys.toString(i) ); if(buttons.contains("L-Ctrl", false) && buttons.contains("L-Alt", false) && buttons.contains("M", false)) { System.out.println("Ctrl+Alt+M combination entered!"); } 

256 è l'indice del tasto massimo nella class Input.Keys (puoi andare in class e controllare - inoltre troverai tutti i nomi delle stringhe dei pulsanti)