Greenfoot bewegung per KeyInput?
Ich wollte wissen, wie ich eine Tastatureingabe nutzten kann, konnte jedoch nichts finden, was wirklich funktioniert ...
while(true) {
String key = Greenfoot.getKey();
if ("w".equals(key))
{
setRotation(270);
Y = getY() + 1;
}
if ("s".equals(key))
{
setRotation(90);
Y = getY() - 1;
}
if ("a".equals(key))
{
setRotation(180);
X = getX() - 1;
}
if ("d".equals(key))
{
setRotation(0);
X = getX() + 1;
}
}
1 Antwort
Je Aktionszyklus (Aufruf aller act-Methoden) solltest du nur vom ersten getKey-Aufruf einen konkreten Tastenwert erwarten können (zu der Taste, die zuletzt gedrückt wurde). Weitere Aufrufe der Methode dürften null zurückliefern (das wären bei dir dann die in den Iterationen n + 1). Als Test dazu könntest du bei deinem Code ja einfach einmal eine Verzweigung hinzufügen:
int iteration = 0;
while (true) {
String key = Greenfoot.getKey();
if (key == null) System.out.printf("%d: Is null%n", iteration);
else System.out.printf("%d: Not null%n", iteration);
/* ... */
}
und bei Ausführung dann die Ausgaben betrachten. Wenn sich meine Vermutung bestätigt, ist die while-Schleife definitiv falsch.
Des Weiteren würde ich eher die isKeyDown-Methode nutzen, so wie es auch das Beispiel in der Dokumentation zur Handhabung von Tastatureingaben zeigt. Sie prüft, ob eine Taste aktuell gedrückt wird.
public void act() {
if (Greenfoot.isKeyDown("w")) {
setRotation(270);
Y = getY() + 1;
}
if (Greenfoot.isKeyDown("s")) {
setRotation(90);
Y = getY() - 1;
}
/* etc. ... */
}