Benutzer-Werkzeuge

Webseiten-Werkzeuge


api:documentation:spiele:maus

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
api:documentation:spiele:maus [2021/01/14 16:53] – angelegt Martin Pabstapi:documentation:spiele:maus [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 4: Zeile 4:
 ===== a) Reaktion auf Mausereignisse durch Überschreiben von Ereignishandlern eines grafischen Objekts ===== ===== a) Reaktion auf Mausereignisse durch Überschreiben von Ereignishandlern eines grafischen Objekts =====
 <WRAP center round info 80%> <WRAP center round info 80%>
 +Jedes graphische Objekt hat die Methoden
 +  * ''onMouseEnter(double x, double y)'' (wird aufgerufen, wenn sich der Mauszeiger in das Objekt hineinbewegt)
 +  * ''onMouseLeave(double x, double y)'' (wird aufgerufen, wenn sich der Mauszeiger aus dem Objekt hinausbewegt)
 +  * ''onMouseDown(double x, double y, int key)'' (wird aufgerufen, wenn sich der Mauszeiger über dem Objekt befindet und eine der Maustasten gedrückt wurde)
 +  * ''onMouseUp(double x, double y, int key)'' (wird aufgerufen, wenn sich der Mauszeiger über dem Objekt befindet und eine der Maustasten losgelassen wurde)
 +  * ''onMouseMove(double x, double y)'' (wird aufgerufen, wenn sich der Mauszeiger über dem Objekt befindet und bewegt)
 +Diese Methoden kann man in einer Unterklasse überschreiben und so auf die entsprechenden Ereignisse reagieren. \\ \\ 
 +**Tipps:**
 +  * Die Parameter ''x'' und ''y'' der Ereignishandler sind die Koordinaten des Mauszeigers zum Zeitpunkt des Ereignisses \\ \\ 
 +  * ''key == 0'' bedeutet linke Maustaste, ''key == 1'' bedeutet mittlere Maustaste und ''key == 2'' bedeutet rechte Maustaste. \\ \\ 
 +  * Die Methode ''startTrackingEveryMouseMovement'' bewirkt, dass fortan **jedes** Mausereignis zum Aufruf des entsprechenden Ereignishandlers beim Objekt führt, auch wenn sich der Mauszeiger außerhalb des Objekts befindet. \\ \\ 
 +  * Die Methode ''stopTrackingEveryMouseMovement'' beschränkt die Mausereignisse wieder auf diejenigen innerhalb des Objekts. \\ \\ 
 </WRAP> </WRAP>
  
Zeile 13: Zeile 25:
  
 <script type="text/plain" title="Mouse_1.java"> <script type="text/plain" title="Mouse_1.java">
 +for(int i = 0; i < 10; i++) {
 +   
 +   DragDropRechteck r = new DragDropRechteck(70 * i, 300, 50, 50);
 +   r.setFillColor(Color.randomColor(50));
 +
 +}
 +
 +while(true);
 +
 +class DragDropRechteck extends Rectangle {
 +   
 +   boolean mouseDown = false;
 +   double mouseXLastTime = 0;
 +   double mouseYLastTime = 0;
 +
 +
 +   public void onMouseEnter(double x, double y) {
 +      tint("#808080");
 +   }
 +
 +   public void onMouseLeave(double x, double y) {
 +      tint("#ffffff");
 +   }
 +
 +   public void onMouseDown(double x, double y, int key) {
 +      mouseXLastTime = x;
 +      mouseYLastTime = y;
 +      mouseDown = true;
 +      // Ab jetzt soll onMouseMove auch aufgerufen werden, wenn sich der
 +      // Mauszeiger außerhalb des Objektes befindet:
 +      startTrackingEveryMouseMovement();
 +   }
 +
 +   public void onMouseMove(double x, double y) {
 +      if(mouseDown) { 
 +         move(x - mouseXLastTime, y - mouseYLastTime);
 +         mouseXLastTime = x;
 +         mouseYLastTime = y;
 +      }
 +   }
 +
 +   public void onMouseUp(double x, double y, int key) {
 +      mouseDown = false;
 +      stopTrackingEveryMouseMovement();
 +   }
 +
 +}
 </script> </script>
  
Zeile 21: Zeile 80:
 ===== b) Registrieren eines MouseListeners beim World-Objekt ===== ===== b) Registrieren eines MouseListeners beim World-Objekt =====
 <WRAP center round info 80%> <WRAP center round info 80%>
 +Das Interface ''MouseListener'' besitzt Methoden
 +  * ''void onMouseDown(double x, double y, int button)''  (wird aufgerufen, wenn eine Maustaste nach unten gedrückt wird)
 +  * ''void onMouseUp(double x, double y, int button)''  (wird aufgerufen, wenn eine Maustaste losgelassen wird)
 +  * ''void onMouseMove(double x, double y)''  (wird aufgerufen, wenn der Mauszeiger sich bewegt)
 +  * ''void onMouseEnter(double x, double y)''  (wird aufgerufen, wenn der Mauszeiger sich in den Grafikbereich hineinbewegt)
 +  * ''void onMouseLeave(double x, double y)''  (wird aufgerufen, wenn der Mauszeiger sich aus dem Grafikbereich hinausbewegt)
 +Dabei bedeutet ''button == 1'': linke Maustaste, ''button == 2'': mittlere Maustaste und ''button == 3'': rechte Maustaste. \\ \\ 
 +Wird das Objekt einer Klasse, die ''MouseListener'' implementiert, beim ''World''-Objekt mittels seiner Methode ''addMouseListener'' registriert, so werden die obigen Methoden aufgerufen, wenn die jeweiligen Mausereignisse auf dem Grafikbereich auftreten.
 </WRAP> </WRAP>
  
 ===== Beispiel 2: Mauszeigerspur ===== ===== Beispiel 2: Mauszeigerspur =====
-Starte das Programm und fahre mit der Maus über den Grafikausgabebereich!+Starte das Programm und fahre mit der Maus über den Grafikausgabebereich! Probiere auch die linke Maustaste aus.
 <HTML> <HTML>
  
Zeile 30: Zeile 97:
  
 <script type="text/plain" title="Mouse_2.java"> <script type="text/plain" title="Mouse_2.java">
 +World w = new World(800, 600);
 +w.addMouseListener(new MyMouseListener());
 +while(true);
 +
 +class MyMouseListener implements MouseListener {
 +   
 +   Color color = Color.white;
 +
 +  public void onMouseUp(double x, double y, int button) {
 +    color = Color.white;
 +  }
 +
 +  public void onMouseDown(double x, double y, int button) {
 +    color = Color.red;
 +  }
 +
 +  public void onMouseMove(double x, double y) {
 +      FadingCircle c = new FadingCircle(x, y, 10);
 +      c.setFillColor(color);
 +  }
 +
 +  public void onMouseEnter(double x, double y) {
 +    //TODO: Methode füllen
 +  }
 +
 +  public void onMouseLeave(double x, double y) {
 +    //TODO: Methode füllen
 +  }
 +
 +}
 +
 +class FadingCircle extends Circle {
 +   
 +   int timeToLive = 60;
 +
 +   public void act() {
 +      setAlpha((1.0 / 60) * timeToLive);
 +      timeToLive--;
 +      if(timeToLive < 0) {
 +         destroy();
 +      } 
 +   }
 +
 +}
 </script> </script>
  
api/documentation/spiele/maus.1610639611.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki