Processing: Programmieren für Anfänger

Seite 4: Schleifenlos glücklich

Inhaltsverzeichnis

Bisher listen die vorgestellten Programmskizzen Anweisung um Anweisung auf, die Processing genau in der vorgegebenen Reihenfolge abarbeitet und zum Schluss als fertiges Bild auf den Schirm zeichnet.

Möchte man dem Computer lieber Schritt für Schritt zusehen, unterteilt man sein Programm in zwei Blöcke. Alles, was die geschweifte Klammer nach void setup() umfasst, führt der Interpreter nach Start des Programms genau einmal aus. Die Anweisungen, die auf void draw() folgen, werden immer wieder ausgeführt und die Darstellung des Programmfensters aufgefrischt, bis das Programm beendet wird – als ob sie in einer endlos laufenden Schleife stünden.

Bei setup() und draw() handelt es sich um Standard-Funktionen von Java-Applets, die man in Processing mit eigenem Leben füllen kann. Funktionen sind so etwas wie selbst definierte Befehle. Ruft man sie auf, muss man ihnen die Parameter mitgeben, die in der runden Klammer angegeben sind – ist die Klammer leer, erwartet die Funktion keine Parameter. Das Schlüsselwort void gibt an, dass die Funktion am Ende kein Ergebnis zurückliefert. Ansonsten wäre dessen Typ angegeben, etwa int für eine ganze oder float für eine Gleitkommazahl.

Einfache Abfragen für die Position des Mauszeigers bringen Interaktion in Kunstprogramme.

Definiert man Variablen ganz zu Anfang des Programms, außerhalb jeder geschweiften Klammer, kann man auf sie von allen Funktionen aus zugreifen – ansonsten sind sie nur innerhalb der Funktion bekannt, in der sie definiert werden. Das Programm Stern_3 listet eine ganze Reihe Variablen auf, ehe setup() Größe und Hintergrundfarbe des Programmfensters festlegt. Jeder Durchgang von draw() fügt dem Bild einen Stahl des Sterns hinzu. Strichstärke und Farbe des Strahls sind zufällig, die maximale Länge hängt direkt von der Stärke ab. Die Strahlen entspringen bei diesem Programm allerdings nicht in der Mitte des Programmfensters, sondern an der Position des Mauszeigers, für die man einfach die Variablen mouseX und mouseY einsetzt:

line (mouseX, mouseY, mouseX+dx, mouseY-dy);

Trotzdem soll zunächst ein Stern von der Mitte aus beginnen, weshalb setup() den Mauszeiger zu Beginn in die Mitte des Fensters setzt:

mouseX = width/2;
mouseY = height/2;

Bis es beendet wird, schickt das Programm immer neue Strahlen los. Dank einer weiteren Standardfunktion lässt sich aber ein Zwischenzustand als Pixelbild speichern:

void mousePressed(){
save("Stern.png");
}

Wird eine Maustaste gedrückt, ruft Processing diese Funktion außer der Reihe auf. Der Screenshot landet wieder im gleichen Verzeichnis wie der Code. Drückt man mehrmals, wird die ältere Bilddatei allerdings rücksichtslos übergebügelt.

Stern_4 variiert seinen Vorgänger: Am Anfang von draw() legt das Programm übers gesamte Fenster ein nahezu transparentes Rechteck in der Hintergrundfarbe. Ältere Strahlen scheinen dadurch zu verblassen. Der Effekt variiert, wenn man sich an der Deckkraft der Füllfarbe zu schaffen macht.