Tutorials/Tastatur: Unterschied zwischen den Versionen
K (→Tasten gedrückt halten) |
K (neue Doc-Vorlage) |
||
(4 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 9: | Zeile 9: | ||
Nach diesem Tutorial kannst du verschiedene Tastatureingaben verarbeiten, vor Allem: | Nach diesem Tutorial kannst du verschiedene Tastatureingaben verarbeiten, vor Allem: | ||
− | * Tastendruck außerhalb der | + | * Tastendruck außerhalb der {{Doc|ea/Game}}-Klasse |
* Tasten loslassen | * Tasten loslassen | ||
* Anwendung: Tasten gedrückt halten. | * Anwendung: Tasten gedrückt halten. | ||
Zeile 21: | Zeile 21: | ||
[[Datei:tutorial tastatur tastenreagierbar.png |mini|ohne]]</div> | [[Datei:tutorial tastatur tastenreagierbar.png |mini|ohne]]</div> | ||
− | Die Engine hat '''2 Interfaces''' für das | + | Die Engine hat '''2 Interfaces''' für das Reagieren auf Tastendruck. Man kann das '''Herunterdrücken''' durch das Interface {{Doc|ea/TastenReagierbar}} beaobachten. Das '''Loslassen''' von Tasten kann man durch das Interfae {{Doc|ea/TastenLosgelassenReagierbar}} beobachten. |
{| class="wikitable" | {| class="wikitable" | ||
! | ! | ||
− | ! | + | ! {{Doc|ea/TastenReagierbar}} |
− | ! | + | ! {{Doc|ea/TastenLosgelassenReagierbar}} |
|- | |- | ||
! Reaktionsmethode | ! Reaktionsmethode | ||
Zeile 49: | Zeile 49: | ||
<div class="hinweisInfo"> | <div class="hinweisInfo"> | ||
− | Die Klasse | + | Die Klasse {{Doc|ea/Game}} implementiert bereits das Interface {{Doc|ea/TastenReagierbar}}. Das heißt, dass die |
spielsteuernde Klasse dieses Interface nicht erneut implementieren kann! | 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. | 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. | ||
</div> | </div> | ||
− | |||
== Tasten gedrückt halten == | == Tasten gedrückt halten == | ||
Zeile 59: | Zeile 58: | ||
Manchmal soll sich eine Spielfigur nicht nur bei einmaligem Tastendruck (bzw. loslassen) bewegen, sondern ''solange eine bestimmte Taste gedrückt ist''. | 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 | + | 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 {{Doc|ea/Game}}: |
<source> | <source> | ||
Zeile 67: | Zeile 66: | ||
Übergebe dieser Methode den Code der Taste, die du überprüfen willst (siehe [[Tastaturtabelle]]). Sie gibt <code>true</code> zurück, wenn die entsprechende Taste ''gerade jetzt'' heruntergedrückt wird. Wird die Taste gerade nicht heruntergedrückt, ist das Ergebnis <code>false</code>. | Übergebe dieser Methode den Code der Taste, die du überprüfen willst (siehe [[Tastaturtabelle]]). Sie gibt <code>true</code> zurück, wenn die entsprechende Taste ''gerade jetzt'' heruntergedrückt wird. Wird die Taste gerade nicht heruntergedrückt, ist das Ergebnis <code>false</code>. | ||
+ | Praktisch anwenden kannst du das Tasten gedrückt halten, indem du dies mit einem {{Doc|ea/Ticker}} kombinierst. Wie das funktioniert, lernst du im [[Tutorials/Multitasking|Multitasking-Tutorial]]. Damit kannst du zum Beispiel deine Spielfigur kontinuierlich bewegen, solange eine Pfeiltaste gedrückt wird: | ||
+ | |||
+ | <source> | ||
+ | |||
+ | /** 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); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | == Probleme? == | ||
+ | |||
+ | |||
+ | <div class="hinweisProbleme"> | ||
+ | Du kannst ein einfaches [https://github.com/engine-alpha/beispiel-tasten/archive/master.zip Beispielprojekt], das alle Tasten-Funktionen demonstriert herunterladen, testen und einsehen. | ||
+ | </div> |
Aktuelle Version vom 1. November 2014, 10:49 Uhr
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.
Inhaltsverzeichnis
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
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, das alle Tasten-Funktionen demonstriert herunterladen, testen und einsehen.