Benutzer-Werkzeuge

Webseiten-Werkzeuge


api:documentation:spiele:tastatur

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


api:documentation:spiele:tastatur [2024/08/31 10:03] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Tastatursteuerung ======
 +Es gibt grundsätzlich zwei Ansätze, um auf Tastaturereignisse zu reagieren:
 +
 +===== a) Abfrage des Tastatur-Status in der act-Methode =====
 +<WRAP center round info 80%>
 +Jedes graphische Objekt hat die Methoden ''isKeyDown(String key)'' und ''isKeyUp(String key)'', die genau dann ''true'' zurückliefern, wenn die übergebene Taste gerade heruntergedrückt bzw. (im Fall von ''isKeyUp'') nicht heruntergedrückt ist. Mit diesen Methoden kann man bspw. in der ''act''-Methode alle 1/30 s den Status bestimmter Tasten abfragen und abhängig davon agieren.
 +</WRAP>
 +
 +===== Beispiel 1: Steuerung eines Raumschiffs =====
 +Starte das Programm und probiere die Pfeiltasten und die Tasten r und l aus!
 +<HTML>
 +
 +<div class="java-online" style="height: 400px; width: 80%" data-java-online="{'withBottomPanel': false, 'id': 'Keyboard_1'}">
 +
 +<script type="text/plain" title="Keyboard_1.java">
 +new Raumschiff();
 +
 +class Raumschiff extends Sprite {
 +   
 +   double speed = 4;
 +   
 +   public Raumschiff() {
 +      super(400, 300, SpriteLibrary.Ship_1, 0);
 +      scale(0.3);
 +   }
 +
 +   public void act() {
 +
 +      if(isKeyDown("r")) {
 +         rotate(-5);
 +      }
 +
 +      if(isKeyDown("l")) {
 +         rotate(5);
 +      }
 +
 +      if(isKeyDown(Key.ArrowLeft)) {
 +         move(-speed, 0);
 +      }
 +
 +      if(isKeyDown(Key.ArrowRight)) {
 +         move(speed, 0);
 +      }
 +
 +      if(isKeyDown(Key.ArrowUp)) {
 +         move(0, -speed);
 +      }
 +
 +      if(isKeyDown(Key.ArrowDown)) {
 +         move(0, speed);
 +      }
 +
 +
 +   }
 +}
 +</script>
 +
 +</div>
 +
 +</HTML>
 +
 +
 +===== b) Überschreiben von Ereignis-Handlern =====
 +<WRAP center round info 80%>
 +Jedes graphische Objekt (genauer: jede Unterklasse von ''Actor'') besitzt die Methoden 
 +  * ''onKeyUp(String key)'' (wird aufgerufen, wenn eine Taste losgelassen wird)
 +  * ''onKeyDown(String key)'' (wird aufgerufen, wenn eine Taste heruntergedrückt wird)
 +  * ''onKeyTyped(String key)'' (wird aufgerufen, wenn eine Taste heruntergedrückt und anschließend losgelassen wird)
 +Diese Methoden kann man überschreiben und damit auf die entsprechenden Tastaturereignisse reagieren. \\ \\ 
 +**Bemerkung:** Die Methoden ''onKeyUp'' und ''onKeyTyped'' unterscheiden sich darin, dass manche Betriebssysteme beim langen Drücken einer Taste viele KeyTyped-Ereignisse in Folge auslösen. Das KeyUp-Ereignis wird aber nur jeweils ein Mal beim Loslassen ausgelöst.
 +</WRAP>
 +
 +===== Beispiel 2: Starten von Raumschiffen durch Überscheiben von Ereignishandlern =====
 +Starte das Programm und probiere die Tasten a, b und c aus!
 +<HTML>
 +
 +<div class="java-online" style="height: 400px; width: 80%" data-java-online="{'withBottomPanel': false, 'id': 'Keyboard_2'}">
 +
 +<script type="text/plain" title="Keyboard_2.java">
 +new Raumschiff2(100, 500, "a");
 +new Raumschiff2(300, 500, "b");
 +new Raumschiff2(500, 500, "c");
 +new Raumschiff2(700, 500, "c");
 +
 +class Raumschiff2 extends Sprite {
 +   
 +   double vy = 0;
 +   String taste;
 +   
 +   public Raumschiff2(double x, double y, String taste) {
 +      super(x, y, SpriteLibrary.Ship_1, 1);
 +      this.taste = taste;
 +      scale(0.3);
 +      rotate(90);
 +   }
 +
 +   public void act() {
 +
 +      move(0, vy);
 +      if(isOutsideView()) {
 +         destroy();
 +      }
 +
 +   }
 +
 +   public void onKeyDown(String key) {
 +      if(key == taste) {
 +         vy = -40;
 +      }
 +   }
 +
 +}
 +</script>
 +
 +</div>
 +
 +</HTML>
 +