====== Beispiel 2: Fliegende Rechtecke ====== Starte das Programm und regle die Geschwindigkeit langsam hoch!
==== 1. Grafikausgabe ==== Die auf dieser Website verwendete Java-Entwicklungsumgebung beinhaltet eine Grafikbibliothek, mit der bspw. einfach Spiele programmiert werden können. Sie basiert auf dem Open Source Projekt {{https://www.pixijs.com/|PisiJS}}, ist aber deutlich einfacher zu handhaben. Für dieses Programmierbeispiel reicht es, zwei Dinge zu kennen: == a) Erzeugen des Grafikbereiches ("Welt") == new World(800, 600); erzeugt im Ausgabe-Bereich rechts ein kleines "Grafikfenster". Seine Größe orientiert sich immer an der Größe des Ausgabe-Bereichs. Die Grafik wird dabei immer so transformiert dass die linke obere Ecke die Koordinaten (0, 0) hat, die rechte untere Ecke - im Beispiel oben - die Koordinaten (800, 600). Dass die positive y-Achse nach unten zeigt, die y-Koordinaten also nach unten hin immer größer werden - ist bei Computersystemen üblich. == b) Zeichnen eines Rechtecks == Die Anweisung new Rectangle(100, 50, 600, 400); erzeugt ein Rechteck-Objekt und zeichnet es in den Grafikbereich. Das Rechteck ist initial achsenparallel ausgerichtet, wobei die Parameter des Konstruktors ''new Rectangle(left, top, width, height)'' folgende Bedeutung haben: * (left, top): Koordinaten der linken oberen Ecke * width, heigth: Breite und Höhe des Rechtecks == Beispiel == Im folgenden zeichnen wir ein Rechteck auf den Bildschirm, färben es rot und drehen es um 70° gegen den Uhrzeigersinn:
==== 2. Erweitern der Klasse Rectangle ==== Wir definieren jetzt eine Unterklasse ''FlyingRectangle'' der Klasse ''Rectangle'' und setzen seine Größe und Position im Konstruktor. Zudem geben wir ihm eine zufällige Farbe:
==== 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:
==== 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 |}}