Achtung! Ein grundlegendes Konzept ist hier Voraussetzung für dieses Tutorial. Falls du es noch nicht gemacht hast, solltest du vorher das Interface-Tutorial abschließen.

Ziel des Tutorials

Nach diesem Tutorial kannst du verschiedene Tastatureingaben verarbeiten, vor Allem:

  • Tastendruck außerhalb der Game-Klasse
  • Tasten loslassen
  • Anwendung: Tasten gedrückt halten.


Tasten-Interfaces der Engine

tutorial tastatur tastenreagierbar.png
tutorial tastatur tastenreagierbar.png

Die Engine hat 2 Interfaces für das Reagieren auf Tastendruck. Man kann das Herunterdrücken durch das Interface TastenReagierbar beaobachten. Das Loslassen von Tasten kann man durch das Interfae TastenLosgelassenReagierbar beobachten.

TastenReagierbar TastenLosgelassenReagierbar
Reaktionsmethode
public void reagieren(int code)
public void tasteLosgelassen(int code)
Aufgerufen Sobald eine Taste einmal heruntergedrückt wird. Diese Methode wird für die selbe Taste erst dann wieder aufgerufen, wenn diese Taste davor auch wieder losgelassen wurde. Immer dann, wenn eine Taste losgelassen wird. Diese Methode wird für die selbe Taste erst dann wieder aufgerufen, wenn diese Taste davor auch wieder heruntergedrückt wurde.
Parameter Der Parameter code ist eine Zahl, die anzeigt, welche Taste gedrückt wurde. Welche Taste zu welcher Zahl gehört, lässt sich aus der Tastaturtabelle ablesen.
Anmeldemethode
public void tastenReagierbarAnmelden(
   TastenReagierbar t)
//Anmeldemethode in der Klasse Game!!
public void tastenLosgelassenReagierbarAnmelden(
    TastenLosgelassenReagierbar t)
//Anmeldemethode in der Klasse Game!!

Die Klasse Game implementiert bereits das Interface TastenReagierbar. Das heißt, dass die spielsteuernde Klasse dieses Interface nicht erneut implementieren kann! Dieses Interface ist also nur in anderen Klassen zu verwenden. Im Grunde ist das Implementieren hiervon in den meisten Spielen nicht nötig, denn das Reagieren auf einfachen Tastendruck ist ja bereits in der Klasse Game realisiert. Dennoch kann es bei großen Projekten Sinn machen, das Reagieren des Tastendrucks auf mehrere Klassen zu verteilen.

Tasten gedrückt halten

Manchmal soll sich eine Spielfigur nicht nur bei einmaligem Tastendruck (bzw. loslassen) bewegen, sondern solange eine bestimmte Taste gedrückt ist.

Das lässt sich natürlich auch mit der Engine realisieren. Zunächst gibt es hierfür eine Tastendrucküberprüfung. Dies geschieht über eine Methode in der Klasse Game:

public boolean tasteGedrueckt(int code)

Übergebe dieser Methode den Code der Taste, die du überprüfen willst (siehe Tastaturtabelle). Sie gibt true zurück, wenn die entsprechende Taste gerade jetzt heruntergedrückt wird. Wird die Taste gerade nicht heruntergedrückt, ist das Ergebnis false.

Praktisch anwenden kannst du das Tasten gedrückt halten, indem du dies mit einem Ticker kombinierst. Wie das funktioniert, lernst du im Multitasking-Tutorial. Damit kannst du zum Beispiel deine Spielfigur kontinuierlich bewegen, solange eine Pfeiltaste gedrückt wird:

/** Deine Spielfigur */
Raum figur;

/** In der Tick-Methode wird nun regelmäßig abgefragt, ob eine
 * Pfeiltaste gedrückt wurde. Ist das der Fall, wird die Figur
 * entsprechend nach links, rechts, oben bzw. unten verschoben.
 */
public void tick() {
	//ist gerade die Pfeiltaste Oben gedrückt?
	if(tasteGedrueckt(Taste.OBEN)) {
		//Verschiebe die Figur um 1 Pixel nach oben.
		figur.verschieben(0, -2);
	}
	//ist gerade die Pfeiltaste rechts gedrückt?
	if(tasteGedrueckt(Taste.RECHTS)) {
		//Verschiebe die Figur um 1 Pixel nach rechts.
		figur.verschieben(2, 0);
	}
	//ist gerade die Pfeiltaste unten gedrückt?
	if(tasteGedrueckt(Taste.UNTEN)) {
		//Verschiebe die Figur um 1 Pixel nach unten.
		figur.verschieben(0, 2);
	}
	//ist gerade die Pfeiltaste links gedrückt?
	if(tasteGedrueckt(Taste.LINKS)) {
		//Verschiebe die Figur um 1 Pixel nach links.
		figur.verschieben(-2, 0);
	}
}


Probleme?

Du kannst ein einfaches Beispielprojekt, dass alle Tasten-Funktionen demonstriert herunterladen, testen und einsehen.