Benutzer-Werkzeuge

Webseiten-Werkzeuge


api:documentation:grafik:keystate

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
api:documentation:grafik:keystate [2021/01/06 18:25] – [Steuerung von Grafikobjekten per Tastatur] Martin Pabstapi:documentation:grafik:keystate [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 3: Zeile 3:
 Stell' Dir die Steuerung eines Mario-artiges Jump'n Run-Spieles vor: solange der Spieler die "Pfeil-nach-rechts"-Taste gedrückt hält, soll sich die Spielfigur nach rechts bewegen. Sobald der Spieler die Taste loslässt, sollt die Spielfigur stehenbleiben. Wie lässt sich das programmtechnisch umsetzen? \\ \\  Stell' Dir die Steuerung eines Mario-artiges Jump'n Run-Spieles vor: solange der Spieler die "Pfeil-nach-rechts"-Taste gedrückt hält, soll sich die Spielfigur nach rechts bewegen. Sobald der Spieler die Taste loslässt, sollt die Spielfigur stehenbleiben. Wie lässt sich das programmtechnisch umsetzen? \\ \\ 
 Wir könnten die Methoden ''onKeyDown'' und ''onKeyUp'' aus dem Kapitel über die Tastatur- und Mausereignisse nutzen. Da sie beim gerade geschilderten Ablauf nur jeweils einmal aufgerufen werden, die Spielfigur sich zwischen den beiden Methodenaufrufen aber weiter bewegen soll, müssten wir den Zustand "Pfeil-nach-rechts-Taste ist gerade unten" dazwischen speichern und regelmäßig (z.B. in der ''act''-Methode) auswerten, um die Spielfigur weiter voranzubewegen. \\ \\  Wir könnten die Methoden ''onKeyDown'' und ''onKeyUp'' aus dem Kapitel über die Tastatur- und Mausereignisse nutzen. Da sie beim gerade geschilderten Ablauf nur jeweils einmal aufgerufen werden, die Spielfigur sich zwischen den beiden Methodenaufrufen aber weiter bewegen soll, müssten wir den Zustand "Pfeil-nach-rechts-Taste ist gerade unten" dazwischen speichern und regelmäßig (z.B. in der ''act''-Methode) auswerten, um die Spielfigur weiter voranzubewegen. \\ \\ 
-Genau das macht uns unsere Spiele-API sehr einfach: Jedes Grafikobjekt (genauer: jede von Actor abgeleitete Klasse) hat zwei Methoden ''isKeyUp(String key)'' und ''isKeyDown(String key)'', mit denen sich jederzeit für jede Taste der Tastatur ermitteln lässt, ob sie gerade nach unten gedrückt ist. Diese Methoden nutzen wir, um den Zustand unserer Grafikobjekte in der ''act''-Methode regelmäßig zu verändern und sie so beispielsweise abhängig von den gedrückten Tasten zu bewegen.+Genau dabei unterstützt uns unser API: Jedes Grafikobjekt (genauer: jede von Actor abgeleitete Klasse) hat zwei Methoden ''isKeyUp(String key)'' und ''isKeyDown(String key)'', mit denen sich jederzeit für jede Taste der Tastatur ermitteln lässt, ob sie gerade nach unten gedrückt ist. Diese Methoden nutzen wir, um den Zustand unserer Grafikobjekte in der ''act''-Methode regelmäßig zu verändern und sie so beispielsweise abhängig von den gedrückten Tasten zu bewegen.
 </WRAP> </WRAP>
  
Zeile 11: Zeile 11:
 ===== Beispiel 1: Pfeiltasten steuern Ball ===== ===== Beispiel 1: Pfeiltasten steuern Ball =====
 <HTML> <HTML>
-<div class="java-online" style="height: 350px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'PfeiltastenSteuernBall'}">+<div class="java-online" style="height: 450px; width: 100%" data-java-online="{'withBottomPanel': false, 'id': 'PfeiltastenSteuernBall'}">
 <script type="text/plain" title="PfeiltastenSteuernBall.java"> <script type="text/plain" title="PfeiltastenSteuernBall.java">
-new World(10001000); +new World(800800); 
-new RotatingRectangle(300, 400, 400, 200); +new Ball(400, 400, 30); 
-// Sobald ein Programm eine act-Methode überschreibt, weiß der Interpreter, dass er nach Ende des + 
-// Hauptprogramms mit der Ausführung nicht abbrechen darf, sondern regelmäßig die act-Methoden aufrufen +class Ball extends Circle { 
-// muss. Die folgende Zeile ist daher unnötig. + 
-//while(true){ }+   double v = 8;
  
-class RotatingRectangle extends Rectangle { 
-    
    public void act() {    public void act() {
-      rotate(2);+ 
 +      if(isKeyDown(Key.ArrowLeft)) { 
 +         move(-v, 0); 
 +      }  
 + 
 +      if(isKeyDown(Key.ArrowRight)) { 
 +         move(v, 0); 
 +      }  
 + 
 +      if(isKeyDown(Key.ArrowUp)) { 
 +         move(0, -v); 
 +      }  
 + 
 +      if(isKeyDown(Key.ArrowDown)) { 
 +         move(0, v); 
 +      }  
    }    }
  
api/documentation/grafik/keystate.1609953923.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki