v4.x/User Input: Unterschied zwischen den Versionen
(→Das Interface KeyListener) |
|||
Zeile 66: | Zeile 66: | ||
Die Anmeldung des <code>KeyListener</code>-Interfaces hat automatisch stattgefunden, als der <code>CounterText</code> über <code>add(...)</code> angemeldet wurde. Ab dem Zeitpunkt wird die <code>onKeyDown(KeyEvent)</code>-Methode bei jedem Tastendruck aufgerufen. Zusätzlich hat das Interface eine optionale Methode zur Reaktion auf das Loslassen einer Taste. Du findest die Information in der [https://docs.engine-alpha.org/4.x/ea/event/KeyListener.html Dokumentation]. | Die Anmeldung des <code>KeyListener</code>-Interfaces hat automatisch stattgefunden, als der <code>CounterText</code> über <code>add(...)</code> angemeldet wurde. Ab dem Zeitpunkt wird die <code>onKeyDown(KeyEvent)</code>-Methode bei jedem Tastendruck aufgerufen. Zusätzlich hat das Interface eine optionale Methode zur Reaktion auf das Loslassen einer Taste. Du findest die Information in der [https://docs.engine-alpha.org/4.x/ea/event/KeyListener.html Dokumentation]. | ||
+ | |||
+ | == Auf bestimmten Tastendruck reagieren: Moving Rectangle == | ||
+ | |||
+ | Im folgenden Beispiel reagiert das "Character"-Objekt auf WASD-Input, um sich in diskreten Schritten zu Bewegen. | ||
+ | |||
+ | [[Datei:Tutorial MovingRectangle rectA.png|mini|Das rote Rechteck bewegt sich mit WASD]] | ||
+ | |||
+ | <source lang="java"> | ||
+ | import ea.Game; | ||
+ | import ea.Scene; | ||
+ | import ea.actor.Rectangle; | ||
+ | import ea.event.KeyListener; | ||
+ | |||
+ | import java.awt.Color; | ||
+ | import java.awt.event.KeyEvent; | ||
+ | |||
+ | |||
+ | public class MovingRectangle | ||
+ | extends Scene { | ||
+ | |||
+ | public MovingRectangle() { | ||
+ | this.add(new Character()); | ||
+ | } | ||
+ | |||
+ | public static void main(String[] args) { | ||
+ | Game.start(600, 400, new MovingRectangle()); | ||
+ | Util.addScreenshotKey("rectA"); | ||
+ | } | ||
+ | |||
+ | private class Character | ||
+ | extends Rectangle | ||
+ | implements KeyListener { | ||
+ | |||
+ | public Character() { | ||
+ | super(2, 2); | ||
+ | this.setCenter(0,0); | ||
+ | setColor(Color.RED); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void onKeyDown(KeyEvent keyEvent) { | ||
+ | switch (keyEvent.getKeyCode()) { | ||
+ | case KeyEvent.VK_W: | ||
+ | this.moveBy(0, 0.5f); | ||
+ | break; | ||
+ | case KeyEvent.VK_A: | ||
+ | this.moveBy(-0.5f, 0); | ||
+ | break; | ||
+ | case KeyEvent.VK_S: | ||
+ | this.moveBy(0, -0.5f); | ||
+ | break; | ||
+ | case KeyEvent.VK_D: | ||
+ | this.moveBy(0.5f, 0); | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | == KeyEvent == | ||
+ | |||
+ | Alle Informationen über den Tastendruck sind im [https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html <code>java.awt.KeyEvent</code>] gespeichert. Die Engine nutzt hier dieselbe Schnittstelle wie Standard-Java, nachdem die auch hier gut funktioniert. | ||
+ | |||
+ | Dieses Mal gibt es eine switch/case-Struktur in der <code>onKeyDown</code>-Methode, um abhängig von der Eingabe (W/A/S/D) unterschiedlich zu reagieren: | ||
+ | |||
+ | <source lang="java"> | ||
+ | @Override | ||
+ | public void onKeyDown(KeyEvent keyEvent) { | ||
+ | switch (keyEvent.getKeyCode()) { | ||
+ | case KeyEvent.VK_W: | ||
+ | this.moveBy(0, 0.5f); | ||
+ | break; | ||
+ | case KeyEvent.VK_A: | ||
+ | this.moveBy(-0.5f, 0); | ||
+ | break; | ||
+ | case KeyEvent.VK_S: | ||
+ | this.moveBy(0, -0.5f); | ||
+ | break; | ||
+ | case KeyEvent.VK_D: | ||
+ | this.moveBy(0.5f, 0); | ||
+ | break; | ||
+ | } | ||
+ | } | ||
+ | </source> |
Version vom 5. Januar 2020, 00:57 Uhr
Dies ist ein Tutorial für die Engine Alpha 4.x. Diese funktioniert anders als die EDU-Version. Du findest eine Übersicht über alle Tutorials hier.
Inhaltsverzeichnis
Inhalt
In diesem Tutorial:
- Reagierst du auf Tastatureingabe des Spielers
Tastencounter
Der folgende Code implementiert einen einfachen Zähler, der die Anzahl an gedrückten Tasten (vollkommen egal, welche) festhält.
import ea.Game;
import ea.Scene;
import ea.actor.Text;
import ea.event.KeyListener;
import java.awt.event.KeyEvent;
public class TastenCounter
extends Scene {
public TastenCounter() {
this.add(new CounterText());
}
public static void main(String[] args) {
Game.start(500, 200, new TastenCounter());
}
private class CounterText
extends Text
implements KeyListener {
private int counter = 0;
public CounterText() {
super("You pressed 0 keys.", 2);
this.setCenter(0,0);
}
@Override
public void onKeyDown(KeyEvent keyEvent) {
counter++;
this.setContent("You pressed " + counter + " keys.");
this.setCenter(0,0);
}
}
}
Das Interface KeyListener
Eine Klasse, die auf Tastatur-Input des Nutzers reagiert implementiert das Interface ea.event.KeyListener
. Die Engine nutzt das Observer-Entwurfsmuster für alle Events.
Dieses Interface hat denselben Namen wie das Standard-Java Interface java.awt.KeyListener
.
Achte darauf, dass du die Zeile import ea.event.KeyListener
einbindest.
Die Anmeldung des KeyListener
-Interfaces hat automatisch stattgefunden, als der CounterText
über add(...)
angemeldet wurde. Ab dem Zeitpunkt wird die onKeyDown(KeyEvent)
-Methode bei jedem Tastendruck aufgerufen. Zusätzlich hat das Interface eine optionale Methode zur Reaktion auf das Loslassen einer Taste. Du findest die Information in der Dokumentation.
Auf bestimmten Tastendruck reagieren: Moving Rectangle
Im folgenden Beispiel reagiert das "Character"-Objekt auf WASD-Input, um sich in diskreten Schritten zu Bewegen.
import ea.Game;
import ea.Scene;
import ea.actor.Rectangle;
import ea.event.KeyListener;
import java.awt.Color;
import java.awt.event.KeyEvent;
public class MovingRectangle
extends Scene {
public MovingRectangle() {
this.add(new Character());
}
public static void main(String[] args) {
Game.start(600, 400, new MovingRectangle());
Util.addScreenshotKey("rectA");
}
private class Character
extends Rectangle
implements KeyListener {
public Character() {
super(2, 2);
this.setCenter(0,0);
setColor(Color.RED);
}
@Override
public void onKeyDown(KeyEvent keyEvent) {
switch (keyEvent.getKeyCode()) {
case KeyEvent.VK_W:
this.moveBy(0, 0.5f);
break;
case KeyEvent.VK_A:
this.moveBy(-0.5f, 0);
break;
case KeyEvent.VK_S:
this.moveBy(0, -0.5f);
break;
case KeyEvent.VK_D:
this.moveBy(0.5f, 0);
break;
}
}
}
}
KeyEvent
Alle Informationen über den Tastendruck sind im java.awt.KeyEvent
gespeichert. Die Engine nutzt hier dieselbe Schnittstelle wie Standard-Java, nachdem die auch hier gut funktioniert.
Dieses Mal gibt es eine switch/case-Struktur in der onKeyDown
-Methode, um abhängig von der Eingabe (W/A/S/D) unterschiedlich zu reagieren:
@Override
public void onKeyDown(KeyEvent keyEvent) {
switch (keyEvent.getKeyCode()) {
case KeyEvent.VK_W:
this.moveBy(0, 0.5f);
break;
case KeyEvent.VK_A:
this.moveBy(-0.5f, 0);
break;
case KeyEvent.VK_S:
this.moveBy(0, -0.5f);
break;
case KeyEvent.VK_D:
this.moveBy(0.5f, 0);
break;
}
}