Je sais comment implémenter un auditeur clé; ce n'est pas le problème.
public void keyTyped(KeyEvent event) {
if (event.getKeyChar() == KEY_LEFT) {
cTDirection = LEFT;
}
if (event.getKeyChar() == 40) {
cTDirection = DOWN;
}
if (event.getKeyChar() == 39) {
cTDirection = RIGHT;
}
if (event.getKeyChar() == 38) {
cTDirection = UP;
}
}
Qu'est-ce que je mets où le LEFT_KEY
/40/39/38? Quand j'ai créé un keylistener et tapé les clés, je pense avoir entre 37 et 40 ans. Je ne sais pas quoi mettre pour écouter uniquement les touches fléchées.
Je recommanderais d'utiliser:
if (event.getKeyCode() == KeyEvent.VK_UP) {
...
}
répéter avec VK_DOWN, VK_LEFT, VK_RIGHT
.
Il existe des codes distincts pour le clavier numérique: VK_KP_UP, VK_KP_DOWN, VK_KP_LEFT, VK_KP_RIGHT
si vous en avez besoin.
Voir KeyEvent pour tous les codes.
KeyEvent.VK_LEFT
, KeyEvent.VK_RIGHT
, etc.
De plus, vous devriez utiliser getKeyCode
, pas getKeyChar
. getKeyChar
est pour les touches qui correspondent réellement à des caractères (lettres, chiffres, espaces, etc.).
Utilisation
if ( e.getKeyCode() == KeyEvent.VK_LEFT){
//Do something
}
Les autres clés sont:
KeyEvent.VK_UP
KeyEvent.VK_RIGHT
KeyEvent.VK_DOWN
Voici ce que j'ai fait pour que cela fonctionne:
public void keyPressed (KeyEvent e) {
int c = e.getKeyCode ();
if (c==KeyEvent.VK_UP) {
b.y--;
} else if(c==KeyEvent.VK_DOWN) {
b.y++;
} else if(c==KeyEvent.VK_LEFT) {
b.x--;
} else if(c==KeyEvent.VK_RIGHT) {
b.x++;
}
System.out.println (b.x);
b.repaint ();
}
Pour moi, cela ne fonctionne pas si je le mets dans KeyPressed, mais fonctionne bien si je le mets dans KeyTyped.
d'abord déclarer la méthode init
public void init(){
this.addKeyListener(new keyb());}
puis utilisez la classe interne qui implémente KeyListner
class keyb implements KeyListener{
public void keyPressed (KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_UP){
y-=50;
}else if(e.getKeyCode()==KeyEvent.VK_DOWN){
y+=50;
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){
x+=50;
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){
x-=50;
}
repaint();
}
public void keyReleased (KeyEvent e){}
public void keyTyped (KeyEvent e){}
}
vous pouvez également utiliser un adaptateur au lieu d'écrire Keyreleased & keyTyped .... comme vous le savez
Utilisez la méthode getKeyCode()
et comparez la valeur renvoyée aux constantes KeyEvent.VK_LEFT
, KeyEvent.VK_RIGHT
, KeyEvent.VK_UP
et KeyEvent.VK_DOWN
.