KeyStrokeListener (Tastatureingabe)1
Tastatureingaben erstellen

Der Counter im Gange
Der folgende Code implementiert einen einfachen Zähler, der die Anzahl an gedrückten Tasten (vollkommen egal, welche) festhält.
Zum Java-Code: demos/tutorials/user_input/KeyStrokeCounterDemo.java
public class KeyStrokeCounterDemo extends Scene
{
public KeyStrokeCounterDemo()
{
add(new CounterText());
}
private class CounterText extends Text implements KeyStrokeListener
{
private int counter = 0;
public CounterText()
{
super("You pressed 0 keys.", 2);
setCenter(0, 0);
}
@Override
public void onKeyDown(KeyEvent keyEvent)
{
counter++;
setContent("You pressed " + counter + " keys.");
setCenter(0, 0);
}
}
}
Das Interface KeyStrokeListener
Eine Klasse, die auf Tastatur-Eingaben des Nutzers reagieren soll, implementiert das Interface KeyStrokeListener Die Engine nutzt das Observer(Beobachter)-Entwurfsmuster, um auf alle eingehenden Ereignisse reagieren zu können.
Die korrekte Anweisung, um das Interface einzubinden, lautet:
Die Anmeldung des KeyStrokeListener-Interfaces hat automatisch stattgefunden,
als das Objekt der Klasse CounterText über add(...) angemeldet wurde. Ab
diesem Zeitpunkt wird die onKeyDown(KeyEvent
e)
-Methode bei jedem Tastendruck aufgerufen.
Soll reagiert werden, wenn eine Taste losgelassen wird, kann die onKeyUp(KeyEvent e)-Methode implementiert werden.
Alle Informationen über den Tastendruck sind im Objekt keyEvent der Klasse
java.awt.event.KeyEvent
gespeichert. Die Engine nutzt hier dieselbe Schnittstelle wie Java.
Im folgendem Beispiel wird mit Hilfe der vier Cursor-Tasten ein kleines Rechteck bewegt:

Das rote Rechteck bewegt sich mit WASD
Zum Java-Code: demos/tutorials/user_input/KeyEventDemo.java
import java.awt.event.KeyEvent;
import pi.Game;
import pi.Scene;
import pi.actor.Actor;
import pi.Rectangle;
import pi.event.KeyStrokeListener;
public class KeyEventDemo extends Scene implements KeyStrokeListener
{
Actor rectangle;
public KeyEventDemo()
{
rectangle = new Rectangle(2, 2).setColor("blue");
add(rectangle);
}
@Override
public void onKeyDown(KeyEvent keyEvent)
{
switch (keyEvent.getKeyCode())
{
case KeyEvent.VK_UP:
rectangle.moveBy(0, 1);
break;
case KeyEvent.VK_RIGHT:
rectangle.moveBy(1, 0);
break;
case KeyEvent.VK_DOWN:
rectangle.moveBy(0, -1);
break;
case KeyEvent.VK_LEFT:
rectangle.moveBy(-1, 0);
break;
}
}
}
Java ordnet jeder Taste eine Ganzzahl, einen sogenannten KeyCode, zu. Mit der
Methode
KeyEvent#getKeyCode()
kann dieser Code abgefragt werden. Außerdem stellt die Klasse KeyEvent eine
Vielzahl von statischen Attributen bzw. Klassenattributen bereit, dessen Name
VK_ vorangestellt ist. VK steht dabei für Virtual
Key. Diese Klassenattribute können in
einer switch-Kontrollstruktur zur Fallunterscheidung verwendet werden.
Das nächste
Beispiel
zeigt den entsprechenden Namen des VK-Klassenattributs an, nachdem eine Taste
gedrückt wurde. Wird zum Beispiel die Leertaste gedrückt, erscheint der Text
VK_SPACE.
Zum Java-Code: demos/tutorials/user_input/KeyEventDisplayDemo.java
public class KeyEventDisplayDemo extends Scene
{
public KeyEventDisplayDemo()
{
add(new KeyText());
}
private class KeyText extends Text implements KeyStrokeListener
{
public KeyText()
{
super("Press a key", 1);
setCenter(0, 0);
}
@Override
public void onKeyDown(KeyEvent keyEvent)
{
String text = KeyEvent.getKeyText(keyEvent.getKeyCode());
text = text.replace(" ", "_");
text = text.toUpperCase();
setContent("VK_" + text);
setCenter(0, 0);
}
}
}
-
Der Abschnitt stammt aus dem Engine-Alpha-Wiki: https://engine-alpha.org/wiki/v4.x/User_Input ↩