Piszę grę, w której sterowanie odbywa się za pomocą klawiszy strzałek. Chciałbym przechwycić naciśnięcie dwóch klawiszy jednocześnie. Obsługa tych naciśnięcia tych klawiszy może być od siebie niezależna.
W tym momencie wykorzystuję interfejs KeyListener. W metodzie keyPressed(KeyEvent) mam obsługę klawiszy.
Jeżeli nacisnę jeden klawisz to oczywiście wszystko działa pięknie. Gdy nacisnę drugi klawisz, to tylko on jest przechwytywany, a ten pierwszy już nie.
0
0
Wciśnięcie dwóch klawiszy na raz jako takie nie istnieje - to zawsze jest sekwenca dwóch zdarzeń KeyDown. Wystarczy badać czy nastąpiła odpowiednia sekwencja KeyDown i nie nastąpiło w międzyczasie KeyUp.
0
innymisłowy...
keyPressed (...) {
if (evt.getKeyCode==codeKlawiszaStrzałkiUp) strzalkaUp = true;
if (evt.getKeyCode==codeKlawiszaStrzałkiLeft) strzalkaLeft = true;
}
keyReleased (...) {
if (evt.getKeyCode==codeKlawiszaStrzałkiUp) strzalkaUp = false;
if (evt.getKeyCode==codeKlawiszaStrzałkiLeft) strzalkaLeft = false;
}
jeżeli jednocześnie strzalkaUp==true i strzalkaLeft ==true, to obie są wciśnięte.
0
a jeszcze innymi słowy :)
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JApplet;
import javax.swing.JLabel;
public class Test79_klawiatura extends JApplet {
boolean Key_K = false;
boolean Key_J = false;
JLabel pole = new JLabel();
public void KeyWcisniete(){
String text="";
if (Key_K==true) {text+="K";}
if (Key_J==true) {text+="J";}
pole.setText("klawisze wcisniete "+text);
}
public Test79_klawiatura(){
this.add(pole); this.setLayout(null);
pole.setBounds(0, 0, 320, 60);
this.setFocusable(true);
this.addKeyListener(new KeyAdapter() {
@Override public void keyReleased(KeyEvent e) {
if (e.getKeyChar()=='k'){ Key_K=false; }
if (e.getKeyChar()=='j'){ Key_J=false; }
KeyWcisniete();
}
@Override public void keyPressed(KeyEvent e) {
if (e.getKeyChar()=='k'){ Key_K=true; }
if (e.getKeyChar()=='j'){ Key_J=true; }
KeyWcisniete();
}
});
}
}
0
Dodam tylko od siebie, że większość klawiatur potrafi odczytać wciśnięcie jednocześnie 3 klawiszy. A to się czasem przydaje.