Im Folgenden programmieren wir eine Winterlandschaft, bei der du interaktiv Schneeflocken auffangen und Geschenke einsammeln kannst.
Um eine Schneeflocke als Grafik darzustellen verwenden wir die Klasse Sprite
.
Diese Grafikklasse besitzt bereits eine ganze Reihe von Attributen und Methoden, die wir nutzen können.
Sprite
, erzeuge ein Objekt der Klasse Sprite und weise es der Variable zu. Nutze als Grafikbibliothek die Bilddatei
Winterwonderland mit dem Index 0 (Schneeflocke). move
, moveTo
, scale
, setAlpha
und rotate
,
Wir wollen nun eine eigene Klasse Schneeflocke
programmieren. Dazu nutzen wir das
Prinzip der Vererbung. Wir erweitern die Klassen Sprite
und ergänzen sie
um weitere Attribute, z. B. die Fallgeschwindigkeite vy
.
die von der Klasse Sprite
erbt.
Diese Grafikklasse besitzt bereits eine ganze Reihe von Attributen und Methoden, die wir nutzen können.
Eine besondere Methode ist act()
, die automatisch 30 Mal pro Sekunde aufgerufen wird.
Der Alphawert zwischen 0 und 1 gibt an, wie transparent die Grafikf ist. Ein höherer Alphawert sorgt dafür,
dass die Schneeflocke nicht weiß, sonder eher gräulich erscheint.
Schneeflocke
.super()
den Konstruktor der Elternklasse Sprite
aufrufen. Nutze den Konstruktor auch dazu
die Größe und die Position der Schneeflocke gegeignet zu wählen und der Fallgeschwindigkeit
vy
den Wert 2 zuzuweisen.act()
und lasse die Schneeflocke damit langsam nach unten bewegen, indem
du sie bei jedem Aufruf um vy
nach unten bewegen lässt.new Schneeflocke()
erzeugst. So sollte es dann ungefähr ausschauen.
Eine einzige, immer an der gleichen Stelle fallende Schneeflocke ist doch recht langweilig.
Wir brauchen viele, unterschiedlich große und schnelle Schneeflocken, die sich über den ganzen Bildschirm verteilen.
Im Konstruktor der Klasse Schneeflocke
müssen wir die Werte für Größe, Position und
Alphawert sowie Sinkgeschwindigkeit zufällig wählen. Dazu steht die Methode
Random.randdouble(double from, double to)
für zufällige Dezimalzahlen bzw.
Random.randint(int from, int to)
für zufällige Ganzzahlen zur Verfügung.
Schneeflocke
so,
dass die horizontale Anfangsposition, die Sinkgeschwindigkeit und der Alphawert zufällig gesetzt werden. So könnte es bei dir dann etwa schneien.
Beachte, dass die Anzahl der erzeugten Schneeflocken pro Zeit von der Ablaufgeschwindigkeit abhängen, die du mit dem Schieberegler einstellen kannst.
Aus unserer Animation wollen wir ein kleines Spiel machen, bei dem es darum geht, alle fallenden Schneeflocken durch einen Klick einzusammeln.
Wir überschreiben dazu die Methode onMouseDown()
der Klasse Sprite
Diese Methode wird automatisch aufgerufen, wenn eine Schneeflocke angeklickt wird. Beim Aufruf der Methode
kann man die Schneeflocke einfach mit dem Befehl destroy()
zerstören und damit
verschwinden lassen. Außerdem sollten die Schneeflocken auch zerstört werden, wenn sie sich außerhalb des
unteren Rands des Zeichenfensters befinden. Die y-Position ist dann größer als 600.
onMouseDown()
und verändere die Methode act()
,
so dass die Schneeflocke gelöscht wird, wenn wie angeklickt wird oder sich aus dem
sichtbaren Bereich bewewegt.
Das kleine Spiel kann noch erweitert werden. Z. B. könnten auch von zufällig Geschenke oder
Christbaumkugel vom Himmel fallen, die nicht angeklickt werden dürfen, weil sonst das Spiel
vorüber ist (Methode ).
Sprite
erbt und das beschriebene
Verhalten hat.
Die fallenden Objekte wirken auch viel schöner, wenn sie sich während des Fluges drehen.
v_rot
, weise ihm
im Konstruktor einen zufälligen Wert zu und nutze in der act()
-Methode die Methode
rotate(double winkel).