Processing ist eine Art „Game Engine“, die es uns ermöglicht relativ schnell und einfach Spiele zu programmieren. Bisher konnten wir nur statische Zeichnungen erstellen. Nun sind die meisten Spiele jedoch so gestaltet, dass sich irgendetwas auf dem Bildschirm bewegt.
Um ein Rechteck mit der Breite 20 und Höhe 25 an der Stelle (30|100) zu erstellen haben wir bisher den Befehl rect(30,100,20,25); verwendet. Wenn dieses Rechteck sich nun bewegen soll, müssen die Koordinaten des Rechteckes sich zur Laufzeit des Programmes verändern können.
Um Werte zur Laufzeit eines Programmes verändern und diesen veränderten Wert speichern zu können braucht man globale Attribute. Attribute sind somit Speicher, der zur Verfügung gestellt wird, um Werte/Dinge zwischen zu speichern.
Merksatz 1.2.1
Möchten wir nun beispielsweise die x-Koordinate des Rechtecks zur Laufzeit des Programmes verändern brauchen wir nun also einen Zwischenspeicher, der die Zahl der x-Koordinate speichert.
Attribute werden am Anfang eines Programmes deklariert. Zahlen speichert man mit dem Datentyp Integer. Die Deklaration eines Attributs besteht aus dem Datentyp und dem Bezeichner des Attributes, mit dem das Attribut im folgenden Code angesprochen werden kann.
Merksatz 1.2.2
Um beispielsweise die Zahl „x-Koordinate“ zu speichern verwenden wir folgenden Code:
int xRechteck;
Der Datentyp ist hier int (Integer), also eine Zahl. Mit dem Bezeichner xRechteck können wir nun im folgenden Code auf den Wert des Attributes zugreifen.
Die Zahl xRechteck hat nun noch nicht den Wert, den wir haben wollen. Wir erinnern uns, wir wollten mit dem Startwert 30 für xRechteck beginnen.
Um einem Attribut einen Startwert zuzuweisen brauchen wir eine sogenannte Zuweisung. Zuweisungen in Java gehen nach der Syntax
AttributBezeichner = NeuerWert.Die initialen Startwerte definiert man in Processing innerhalb der
Merksatz 1.2.3voidsetup()Methode. Diesetup()Methode wird direkt nach den Attributen deklariert. Der Inhalt einer Methode wird in geschweiften Klammern zusammengefasst.
In unserem Beispiel brauchen wir nun also folgenden anschließenden Code:
void setup()
{
xRechteck = 25;
}
//Definition der setup() Methode
//Klammer als Start der Methode
//Zuweisung neuer Wert 25
//Ende der Methode
Nun wird das Rechteck noch nicht gezeichnet, da wir noch keinen rect Befehl geschrieben haben. Ähnlich wie Fernseher, wird das Bild eines Programmes mit einer gewissen Framerate aktualisiert. Die Zeichnung, die bei jeder Aktualisierung gemacht wird, können wir in Processing mit der void draw() Methode beeinflussen.
Die Aktualisierung der Oberfläche von Processing wird in der
Merksatz 1.2.4void draw()Methode verwirklicht.
In unserem Beispiel möchten wir das Rechteck zeichnen. Für die x-Koordinate müssen wir nun allerdings nicht mehr einen festen Wert eingeben, sondern unser Attribut verwenden, da der Wert sich ja ändern soll. Somit sieht die void draw() Methode erst einmal so aus:
void draw() {
rect(xRechteck,100,25,20);
}
//Definition draw Methode
//Start der Methode
//Zeichnen Rechteck
//Ende der Methode
Wenn wir jetzt Ausführen haben wir schon mal das Rechteck. Allerdings bewegt es sich nicht. Wenn wir nun jedoch in der draw() Methode die Zuweisung ergänzen, die den Wert von xRechteck immer wieder um 1 erhöht, bewegt sich das Rechteck nach rechts. Nun müssen wir nur noch am Anfang der Methode jedes mal den Hintergrund neu zeichnen, weil wir sonst immer nur neue Rechtecke zeichnen, aber nie die alten löschen:
void draw() {
background(100);
rect(xRechteck,100,25,20);
xRechteck = xRechteck+1;
}
//Definition der Methode
//Klammern für den Start
//Hintergrund neu zeichnen
//Rechteck zeichnen
//Rechteck um eins nach rechts
//Ende der Methode
Wir sehen nun, dass das Objekt sich nach rechts aus dem Bild bewegt.
Aufgabe 1:
- Implementiere in Processing die
setup()Methode. Dabei soll die Größe des Fensters auf Breite400und Höhe300gesetzt werden. - Erstelle Attribute für die Zahlen
breite,hoehe,xRechteckundyRechteck. - Weise den globalen Attributen eigene Werte in der
setup()Methode zu.
Aufgabe 2:
- Implementiere die
draw()Methode. - Lasse die
draw()Methode dein Rechteck mit den Werten der globalen Attribute zeichnen. - Lasse das Rechteck nach rechts aus dem Bildschirm wandern, indem du den Wert des Attributes
xRechteckindraw()veränderst. - Kannst du erklären, warum das Rechteck nach rechts wandert? Warum zieht es einen schwarzen Streifen hinter sich her?
- Der Befehl
background(200)kann den Hintergrund des Zeichenfensters neu zeichnen. Probiere aus, wo du den Befehl in derdraw()Methode einfügen musst, damit der schwarze Streifen hinter dem Rechteck verschwindet.
Aufgabe 3:
- Erstelle neue globale Variablen
radius,xMittelpunkt,yMittelpunktund weise ihnen in dersetup()Methode eigene Werte zu, so dass der Kreis am unteren Rand der Zeichenfläche ist. - Lasse in der
draw()Methode den Kreis von unten nach oben wandern.
Aufgabe 4:
- Erstelle alle Attribute, die nötig sind um einen Schneemann zu zeichnen und ihn mit der
draw()Methode wandern zu lassen. - Processing bietet automatisch die (unsichtbaren) globalen Attribute
mouseXundmouseYzum Abfragen, welche Position auf der Zeichenfläche der Mauscursor hat. Baue eine Form ein, die sich durch das Bewegen der Maus verändert. - Weitere Anregungen für dein eigene Animation:
a. Man kann auch Farben verändern.
b. Der Hintergrund ist langweilig 😉
c. Wir haben bereits Polygone und Bögen gelernt. Vielleicht kannst du damit etwas Lustiges machen.
d. …
Lösungen der Aufgaben (nur für Abonnenten):
Hier findest du alle Lösungen der Aufgaben dieses Kapitels.