Benutzer-Werkzeuge

Webseiten-Werkzeuge


klassen2:inheritance:flyingrectangle:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
klassen2:inheritance:flyingrectangle:start [2020/05/03 10:28] – [1. Grafikausgabe] Martin Pabstklassen2:inheritance:flyingrectangle:start [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 84: Zeile 84:
 new FlyingRectangle(); new FlyingRectangle();
  
 +class FlyingRectangle extends Rectangle {
  
 +   public FlyingRectangle() {
 +      // Rufe den Konstruktor der Oberklasse auf und setze Position und Größe: left: 360, top: 720, width: 80, height: 80 
 +      super(360, 720, 80, 80);
 +      
 +      // setze eine zufällige Farbe und Durchsichtigkeit
 +      setFillColor(Math.round(Math.random() *(256 *256 * 256 - 1)), Math.random()*0.8+0.2);
 +   }
 +
 +}</script>
 +
 +</div>
 +
 +</HTML>
 +
 +
 +==== 3. Animation ====
 +In der Grafikbibliothek von LearnJ besitzt jedes graphische Objekt eine Methode ''act()'', die vom System 30-mal pro Sekunde aufgerufen wird. Die Idee dazu kommt aus {{https://www.greenfoot.org/files/javadoc/index-all.html|Greenfoot}}. Wenn wir diese Methode in der Klasse ''FlyingRectangle'' implementieren, überschreiben wir damit die gleichnamige Methode der Oberklasse ''Rectangle'', so dass ab jetzt **unsere** Methode 30-mal pro Sekunde aufgerufen wird. Wir können unser Rechteck so beispielsweise ganz einfach drehen lassen: 
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 350px; width: 100%" data-java-online="{'withBottomPanel': false}">
 +
 +<script type="text/plain" title="FlyingRectangle.java">
 +new World(800, 800);
 +new FlyingRectangle();
  
 class FlyingRectangle extends Rectangle { class FlyingRectangle extends Rectangle {
  
    public FlyingRectangle() {    public FlyingRectangle() {
-      // Rufe den Konstruktor der Basisklasse auf und setze Position und Größe: left: 360, top: 720, width: 80, height: 80 +      // Rufe den Konstruktor der Oberklasse auf und setze Position und Größe: left: 360, top: 720, width: 80, height: 80 
       super(360, 720, 80, 80);       super(360, 720, 80, 80);
              
Zeile 96: Zeile 122:
    }    }
  
 +   public void act(){
 +      rotate(4);
 +   }
 +
 +}</script>
 +
 +</div>
 +
 +</HTML>
 +
 +
 +==== 4. Fliegen! ====
 +Um das Rechteck "fliegen" zu lassen, muss es jederzeit seine eigene Geschwindigkeit kennen. Wir fügen der Klasse ''FlyingRectangle'' daher die Attribute ''vx'' und ''vy'' hinzu, die Geschwindigkeitskomponenten in x- und y-Richtung. Im Konstruktor initialisieren wir sie mit Zufallswerten. \\ 
 +Jetzt müssen wir das Rechteck in der Methode ''act()'' nur noch um vx in x-Richtung und vy in y-Richtung vorwärtsbewegen. Zudem erzeugen wir noch eine Art Gravitation, indem wir zu ''vy'' alle 1/30 s den Wert 0.4 addieren.
 +
 +=== Bewegungsgleichungen ===
 +Position und Geschwindigkeit werden also gemäß folgender Gleichungen 30-mal in der Sekunde neu berechnet:
 +{{ :klassen2:inheritance:flyingrectangle:bewegungsgleichungen.png?400 |}}
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 550px; width: 100%" data-java-online="{'withBottomPanel': false}">
 +
 +<script type="text/plain" title="FlyingRectangle.java">
 +new World(800, 800);
 +while(true) {
 +   new FlyingRectangle();
 +}
 +
 +class FlyingRectangle extends Rectangle {
 +   double vx;
 +   double vy;
 +
 +   public FlyingRectangle() {
 +      super(360, 760 - 40, 80, 80);
 +      setFillColor(Math.round(Math.random() *(256 *256 * 256 - 1)), Math.random()*0.8+0.2);  // zufällige Farbe setzen
 +
 +      vx = Math.random() * 10 - 5;       // Anfangsgeschwindigkeit in x-Richtung
 +      vy = Math.random() * (-20) - 6;    // Anfangsgeschwindigkeit in y-Richtung
 +
 +   }
 +
 +   // Die folgende Methode act wird vom System 30-mal pro Sekunde aufgerufen:
 +   public void act() {
 +      move(vx, vy);                      // Vorwärtsbewegen des Rechtecks
 +      vy = vy + 0.4;                     // Gravitation
 +      if(getCenterY() > 900) {
 +         destroy();
 +      }
 +   }
 }</script> }</script>
  
klassen2/inheritance/flyingrectangle/start.1588494536.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki