v4.x/Das Grafikfenster: Unterschied zwischen den Versionen
Mike (Diskussion | Beiträge) (→Anregungen zum Experimentieren) |
Mike (Diskussion | Beiträge) K (→Rollen mit Reibung) |
||
(22 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | {{DISPLAYTITLE:EA 4.x Tutorial: Objekte im Grafikfenster}} | + | {{DISPLAYTITLE:EA 4.x Edu Tutorial: Objekte im Grafikfenster}} |
{{4.xEduTutorialHeader}} | {{4.xEduTutorialHeader}} | ||
Zeile 19: | Zeile 19: | ||
Das Koordinatensystem des Grafikfensters kann angezeigt oder ausgeblendet werden. Hierfür stellt die Klasse <code>SPIEL</code> eine Methode <code>zeigeKoordinatensystem(boolean zeigen)</code> zur Verfügung. rufe sie auf und übergib ihr den Wert <code>true</code> um das Ko-Sy zu zeigen. Übergib ihr den Wert <code>false</code> und das Ko-Sy wird verschwinden. | Das Koordinatensystem des Grafikfensters kann angezeigt oder ausgeblendet werden. Hierfür stellt die Klasse <code>SPIEL</code> eine Methode <code>zeigeKoordinatensystem(boolean zeigen)</code> zur Verfügung. rufe sie auf und übergib ihr den Wert <code>true</code> um das Ko-Sy zu zeigen. Übergib ihr den Wert <code>false</code> und das Ko-Sy wird verschwinden. | ||
− | <code>true</code> und <code>false</code> müssen klein geschrieben werden und | + | <code>true</code> und <code>false</code> müssen klein geschrieben werden und werden NICHT in Anführungszeichen geschrieben. |
=== Wand === | === Wand === | ||
+ | |||
+ | [[Datei:Haus v1.gif|mini|So gehtst du in BlueJ vor. Klicke auf das Video um es zu vergrößern.]] | ||
Erstelle in deiner IDE interaktiv ein Objekt der Klasse <code>RECHTECK</code> und nenne es 'Wand': | Erstelle in deiner IDE interaktiv ein Objekt der Klasse <code>RECHTECK</code> und nenne es 'Wand': | ||
In ''BlueJ'' klickst du dazu mit der rechten Maustaste auf die Klassenkarte von <code>RECHTECK</code> und wählst <code>new RECHTECK()</code>. | In ''BlueJ'' klickst du dazu mit der rechten Maustaste auf die Klassenkarte von <code>RECHTECK</code> und wählst <code>new RECHTECK()</code>. | ||
Rufe interaktiv auf dem Objekt entsprechende Methoden auf, so dass die Wand größer wird, weiß ist und in der unteren Mitte des Grafikfensters liegt: | Rufe interaktiv auf dem Objekt entsprechende Methoden auf, so dass die Wand größer wird, weiß ist und in der unteren Mitte des Grafikfensters liegt: | ||
− | In ''BlueJ'' klickst du mit der rechten Maustaste auf die rote Objektkarte des Objekts und wählst geeignete Methoden aus. Beachte bei eventuell nötigen Eingaben Texte (anders als Zahlen) in Anführungszeichen gesetzt werden müssen. Kommazahlen haben einen Dezimalpunkt (kein Komma). | + | In ''BlueJ'' klickst du mit der rechten Maustaste auf die rote Objektkarte des Objekts und wählst geeignete Methoden aus. Beachte bei eventuell nötigen Eingaben, dass Texte (anders als Zahlen) in Anführungszeichen gesetzt werden müssen. Kommazahlen haben einen Dezimalpunkt (kein Komma). |
=== Dach === | === Dach === | ||
Zeile 39: | Zeile 41: | ||
== Physik der Engine == | == Physik der Engine == | ||
+ | |||
+ | [[Datei:Bouncer.png|mini|Dynamaische und statische Objekte mit Elastizität und Reibung]] | ||
Du kannst Objekte der Engine Alpha mit wenigen Aktionen einer internen Physik unterwerfen. Sie unterliegen dann wahlweise der Schwerkraft oder prallen voneinander ab. Hierzu werden von einer gemeinsamen Oberklasse namens <code>EduActor</code> diverse Methoden zur Verfügung gestellt, über die dann alle Objekte verfügen. Wir verwenden hier beispielhaft: | Du kannst Objekte der Engine Alpha mit wenigen Aktionen einer internen Physik unterwerfen. Sie unterliegen dann wahlweise der Schwerkraft oder prallen voneinander ab. Hierzu werden von einer gemeinsamen Oberklasse namens <code>EduActor</code> diverse Methoden zur Verfügung gestellt, über die dann alle Objekte verfügen. Wir verwenden hier beispielhaft: | ||
Zeile 47: | Zeile 51: | ||
* <code>setzeReibung(double reibungsKoeffizient)</code> : Setzt den Reibungskoeffizienten der Objekte. Damit kann man "rutschen" oder "gleiten" beeinflussen. | * <code>setzeReibung(double reibungsKoeffizient)</code> : Setzt den Reibungskoeffizienten der Objekte. Damit kann man "rutschen" oder "gleiten" beeinflussen. | ||
− | + | === Dynamischer Ball === | |
− | + | [[Datei:Bouncer v2.gif|mini|Dynamischer Ball und Boden als Sensor]] | |
Erzeuge ein Objekt der Klasse <code>RECHTECK</code> und nenne es Boden. Seine Breite soll 20 und seine Höhe 0.5 sein. Den Mittelpunkt setzt du auf (0|-8). | Erzeuge ein Objekt der Klasse <code>RECHTECK</code> und nenne es Boden. Seine Breite soll 20 und seine Höhe 0.5 sein. Den Mittelpunkt setzt du auf (0|-8). | ||
Zeile 59: | Zeile 63: | ||
Mache den Boden statisch. Er stellt dafür die Methode <code>macheStatisch()</code> zur Verfügung. | Mache den Boden statisch. Er stellt dafür die Methode <code>macheStatisch()</code> zur Verfügung. | ||
− | Mache nun den Ball (den du nicht mehr im Grafikfenster siehst) zunächst wieder zum Sensor. Setze seinen Mittelpunkt nun auf (0|8). Der Ball erscheint nun an dieser Stelle und fällt nicht nach unten. Mache den Ball jetzt wieder dynamisch. Er fällt nach unten und wird von dem Boden aufgefangen, weil statische Objekte auf aktive Objekte wie eine "Mauer mit unendlicher Masse" wirken. | + | Mache nun den Ball (den du nicht mehr im Grafikfenster siehst) zunächst wieder zum Sensor. Setze seinen Mittelpunkt nun auf (0|-8). Der Ball erscheint nun an dieser Stelle und fällt nicht nach unten. Mache den Ball jetzt wieder dynamisch. Er fällt nach unten und wird von dem Boden aufgefangen, weil statische Objekte auf aktive Objekte wie eine "Mauer mit unendlicher Masse" wirken. |
=== Elastischer Ball === | === Elastischer Ball === | ||
− | Setze nun die Elastizität des Balls auf den Wert | + | [[Datei:Bouncer v3.gif|mini|Dynmaischer, elastischer Ball und statischer Boden]] |
+ | |||
+ | Setze nun die Elastizität des Balls auf den Wert 0.6 . Er hat von <code>EduActor</code> die Methode <code>setzeElastizitaet(double elastizitaet)</code> geerbt. Setze den Mittelpunkt des Balls nun wieder auf (0|8). Er prellt auf dem Boden mit immer kleineren Sprüngen, bis er schließlich still liegen bleibt. | ||
Elastische Objekte prallen von anderen (dynamischen oder passiven) Objekten ab. | Elastische Objekte prallen von anderen (dynamischen oder passiven) Objekten ab. | ||
=== Rollen mit Reibung === | === Rollen mit Reibung === | ||
− | Setze den Reibungskoeffizienten von Ball und Boden jeweils auf 0.3. Beide Objekte haben von <code>EduActor</code> die Methode <code>setzeReibung(double reibungsKoeffizient)</code> geerbt. Lasse den Ball nun erst noch einmal prellen, da sich Änderungen von Reibung (und auch Elastizität) nur dann tatsächlich verändern, wenn die Objekte sich NICHT berühren !!! | + | Setze den Reibungskoeffizienten von Ball und Boden jeweils auf 0.3 . Beide Objekte haben von <code>EduActor</code> die Methode <code>setzeReibung(double reibungsKoeffizient)</code> geerbt. Lasse den Ball nun erst noch einmal prellen, da sich Änderungen von Reibung (und auch Elastizität) nur dann tatsächlich verändern, wenn die Objekte sich NICHT berühren !!! <br> |
+ | (Setze z.B den Mittelpunkt des Balls auf (0,0) um ihn hoch zu heben.) <br> | ||
Gib dem Ball nun einen Stoß von der Seite, so dass er zu rollen beginnt. Er hat hierzu von <code>EduActor</code> die Methode <code>wirkeImpuls(double x, double y)</code> geerbt. Rufe z.B. <code>wirkeImpuls(200, 0)</code> auf. | Gib dem Ball nun einen Stoß von der Seite, so dass er zu rollen beginnt. Er hat hierzu von <code>EduActor</code> die Methode <code>wirkeImpuls(double x, double y)</code> geerbt. Rufe z.B. <code>wirkeImpuls(200, 0)</code> auf. | ||
Der Ball rollt nach rechts, wird langsamer und bleibt schließlich stehen. | Der Ball rollt nach rechts, wird langsamer und bleibt schließlich stehen. | ||
=== Anregungen zum Experimentieren === | === Anregungen zum Experimentieren === | ||
+ | |||
+ | [[Datei:Bouncer v4.gif|mini|Dynamisches, elastisches Dreieck mit aktivierter Rotation auf statischem Boden]] | ||
* Spiele mit den Werten bei der Elastizität herum. Kannst du den Ball "dauerhaft" springen lassen (ohne Höhenverlust)? | * Spiele mit den Werten bei der Elastizität herum. Kannst du den Ball "dauerhaft" springen lassen (ohne Höhenverlust)? | ||
* Spiele mit den Werten für die Reibung herum. Kannst du "Glatteis" simulieren? | * Spiele mit den Werten für die Reibung herum. Kannst du "Glatteis" simulieren? | ||
* Erzeuge ein weiteres Objekt er Klasse <code>DREIECK</code>, mache es elastisch, drehe es um etwa 10 Grad und rufe außerdem seine von <code>EduActor</code> geerbte Methode <code>setzeRotationBlockiert(boolean blockiert)</code> auf und übergib den Wert false. Mache das Dreieck nun dynamisch. Wie verhält es sich? | * Erzeuge ein weiteres Objekt er Klasse <code>DREIECK</code>, mache es elastisch, drehe es um etwa 10 Grad und rufe außerdem seine von <code>EduActor</code> geerbte Methode <code>setzeRotationBlockiert(boolean blockiert)</code> auf und übergib den Wert false. Mache das Dreieck nun dynamisch. Wie verhält es sich? | ||
+ | |||
+ | |||
+ | |||
+ | {{4.xTutorialFooter| | ||
+ | [[v4.x/Vererbung|Vererbung]] | ||
+ | }} |
Aktuelle Version vom 12. Juni 2023, 06:29 Uhr
Dies ist ein Tutorial für die Edu-Variante der Engine Alpha 4.x. Eine Übersicht aller Edu-Tutorials siehst du hier.
Inhaltsverzeichnis
Inhalt
In diesem Tutorial:
- Erstellst du Grafik-Objekte von vorgegebenen Klassen
- Veränderst du den Zustand der Objekte durch Methoden-Aufrufe
Zeichnen im Grafikfenster
Das Koordinatensystem ist mittig zentriert. Die x-Achse zeigt nach rechts und die y-Achse nach oben, so wie du es aus dem Mathematikunterricht kennst. Stelle dir das Grafikfenster vor wie ein zweidimensionaler Blick in die Welt. Stelle dir für 1 Längeneinheit immer 1 Meter vor, dann wird später auch die Physik funktionieren, wie du es vom Phsikunterricht her kennst :-)
Koordinatensystem zeigen oder verbergen
Das Koordinatensystem des Grafikfensters kann angezeigt oder ausgeblendet werden. Hierfür stellt die Klasse SPIEL
eine Methode zeigeKoordinatensystem(boolean zeigen)
zur Verfügung. rufe sie auf und übergib ihr den Wert true
um das Ko-Sy zu zeigen. Übergib ihr den Wert false
und das Ko-Sy wird verschwinden.
true
und false
müssen klein geschrieben werden und werden NICHT in Anführungszeichen geschrieben.
Wand
Erstelle in deiner IDE interaktiv ein Objekt der Klasse RECHTECK
und nenne es 'Wand':
In BlueJ klickst du dazu mit der rechten Maustaste auf die Klassenkarte von RECHTECK
und wählst new RECHTECK()
.
Rufe interaktiv auf dem Objekt entsprechende Methoden auf, so dass die Wand größer wird, weiß ist und in der unteren Mitte des Grafikfensters liegt:
In BlueJ klickst du mit der rechten Maustaste auf die rote Objektkarte des Objekts und wählst geeignete Methoden aus. Beachte bei eventuell nötigen Eingaben, dass Texte (anders als Zahlen) in Anführungszeichen gesetzt werden müssen. Kommazahlen haben einen Dezimalpunkt (kein Komma).
Dach
Erstelle nun ein neues Objekt der Klasse DREIECK und nenne es Dach. Gelingt es dir, das Dach auf das Haus zu setzen und rot zu färben? Suche nach geeigneten Methoden ...
Anregung zum Experimentieren
- Zeichne in dein Haus noch eine Türe und ein Fenster.
- Stelle neben das Haus noch einen Baum.
Physik der Engine
Du kannst Objekte der Engine Alpha mit wenigen Aktionen einer internen Physik unterwerfen. Sie unterliegen dann wahlweise der Schwerkraft oder prallen voneinander ab. Hierzu werden von einer gemeinsamen Oberklasse namens EduActor
diverse Methoden zur Verfügung gestellt, über die dann alle Objekte verfügen. Wir verwenden hier beispielhaft:
macheDynamisch()
: Unterwirft das Objekt der Schwerkraft.macheStatisch()
: Lässt das Objekt wie eine "unendlich schwere Mauer" wirken. Dynamische Objekte prallen davon ab.macheSensor()
: Frisch erzeugte Objeke sind Senoren. Damit kann man "dynamisch" oder "statisch" wieder rückgängig machen.setzeElastizitaet(double elastizitaet)
: setzt die Elastizität der Objekte. Sie verhalten sich dann wie "Gummibälle".setzeReibung(double reibungsKoeffizient)
: Setzt den Reibungskoeffizienten der Objekte. Damit kann man "rutschen" oder "gleiten" beeinflussen.
Dynamischer Ball
Erzeuge ein Objekt der Klasse RECHTECK
und nenne es Boden. Seine Breite soll 20 und seine Höhe 0.5 sein. Den Mittelpunkt setzt du auf (0|-8).
Erzeuge außerdem ein Objekt der Klasse KREIS
und nenne es Ball. Mache es dynamisch indem du seine Methode macheDynamisch() aufrufst.
In BlueJ machst du eine Rechtsklick auf die rote Objektkarte und geht zu "geerbt von EduActor" und bei Bedarf weiter über "weitere Methoden" bis du sie findest.
Der Ball unterliegt nun der Schwerkraft und fällt nach unten. Aber er ignoriert noch den Boden.
Statischer Boden
Mache den Boden statisch. Er stellt dafür die Methode macheStatisch()
zur Verfügung.
Mache nun den Ball (den du nicht mehr im Grafikfenster siehst) zunächst wieder zum Sensor. Setze seinen Mittelpunkt nun auf (0|-8). Der Ball erscheint nun an dieser Stelle und fällt nicht nach unten. Mache den Ball jetzt wieder dynamisch. Er fällt nach unten und wird von dem Boden aufgefangen, weil statische Objekte auf aktive Objekte wie eine "Mauer mit unendlicher Masse" wirken.
Elastischer Ball
Setze nun die Elastizität des Balls auf den Wert 0.6 . Er hat von EduActor
die Methode setzeElastizitaet(double elastizitaet)
geerbt. Setze den Mittelpunkt des Balls nun wieder auf (0|8). Er prellt auf dem Boden mit immer kleineren Sprüngen, bis er schließlich still liegen bleibt.
Elastische Objekte prallen von anderen (dynamischen oder passiven) Objekten ab.
Rollen mit Reibung
Setze den Reibungskoeffizienten von Ball und Boden jeweils auf 0.3 . Beide Objekte haben von EduActor
die Methode setzeReibung(double reibungsKoeffizient)
geerbt. Lasse den Ball nun erst noch einmal prellen, da sich Änderungen von Reibung (und auch Elastizität) nur dann tatsächlich verändern, wenn die Objekte sich NICHT berühren !!!
(Setze z.B den Mittelpunkt des Balls auf (0,0) um ihn hoch zu heben.)
Gib dem Ball nun einen Stoß von der Seite, so dass er zu rollen beginnt. Er hat hierzu von EduActor
die Methode wirkeImpuls(double x, double y)
geerbt. Rufe z.B. wirkeImpuls(200, 0)
auf.
Der Ball rollt nach rechts, wird langsamer und bleibt schließlich stehen.
Anregungen zum Experimentieren
- Spiele mit den Werten bei der Elastizität herum. Kannst du den Ball "dauerhaft" springen lassen (ohne Höhenverlust)?
- Spiele mit den Werten für die Reibung herum. Kannst du "Glatteis" simulieren?
- Erzeuge ein weiteres Objekt er Klasse
DREIECK
, mache es elastisch, drehe es um etwa 10 Grad und rufe außerdem seine vonEduActor
geerbte MethodesetzeRotationBlockiert(boolean blockiert)
auf und übergib den Wert false. Mache das Dreieck nun dynamisch. Wie verhält es sich?