Greenfoot bewegung per KeyInput?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet

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. ... */
}