5. Oktober 2012
Funktionen werden eingeführt. Sie werden von Processing aufgerufen um bestimmte Aufgaben zu erledigen. Im setup werden grundlegende Befehle zu Aussehen und Verhalten des Programms gegeben. Zum Beispiel die Fenstergrösse und die Hintergrundfarbe des Screens. Die draw Funktion wird dann aufgerufen, wenn das Fenster immer wieder aufs Neue gezeichnet werden soll. So kann man mit Processing auch animieren. Über die Framerate (standartmässig auf 60 Bildern pro Sekunde) wird die Wiederholungsrate festgelegt. Wir bekommen als Grundlage eine Funktion, welche ein lachendes Smiley darstellt. Unsere Aufgabe ist es nun verschiedene, vorgegebene Gemütszustände zu programmieren. Mir fällt es zuerst schwer, mir die Formen nur durch den Code vorzustellen und muss ewig Werte ändern bis eine Linie genau an dem Ort ist, wo ich sie haben will. Auch das darstellen von geometrisch anspruchsvolleren Formen gelingt mir nicht auf Anhieb. Die Referenzen auf der processing.org Website helfen mir sehr. Nachdem ich beginne mir die Formen auf Papier aufzuzeichnen fühle ich mich schon fast wie zuhause im Koordinatensystem. Zur Weiterführung der Idee lernen wir mit Bedingungen umzugehen. So lässt dich ein Smiley aufrufen, wenn eine Bestimmte Taste auf der Tastatur gedrückt wird. Nach einem ziemlich mühsamen Lernprozess kann ich dem Stoff bis jetzt folgen und habe Freude an meinen zwar sehr einfachen aber hart erarbeiteten Smileys. Um einzelne Objekte unabhänig von einander zu animieren oder in der Position zu verändern lernen wir, wie das Koordinatensystem für einzelne Objekte verschoben und wieder hergestellt werden kann. pushMatrix und popMatrix sind hierfür die Zauberworte. Will man so ein Objekt an einem bestimmten Ort rotieren lassen verzeiht einem Processing nicht, dass man die Reihenfolge der Befehle verwechselt. Besser so, sonst lerne ich es nichtint SMILEY_DEFAULT = 1; int SMILEY_SAD = 2; int SMILEY_DRUNK = 3; int SMILEY_ANGRY = 4; int SMILEY_OLD = 5; int SMILEY_ASTOUND = 6; int SMILEY_SLEEPY = 7; int SMILEY_HORNY = 8; int SMILEY_PANIC = 9; int smileyType = SMILEY_DEFAULT; void setup() { size(400, 400); // def. fenstergroesse smooth(); // aktiviere antialiasing strokeWeight(15); // linienbreite } void draw() { background(255); // def. hintergrundfarbe pushMatrix(); translate(width * .5, width * .5); smiley(smileyType); // funtions aufruf popMatrix(); } void keyPressed() { switch(key) { case '1': smileyType = SMILEY_DEFAULT; break; case '2': smileyType = SMILEY_SAD; break; case '3': smileyType = SMILEY_DRUNK; break; case '4': smileyType = SMILEY_ANGRY; break; case '5': smileyType = SMILEY_OLD; break; case '6': smileyType = SMILEY_ASTOUND; break; case '7': smileyType = SMILEY_SLEEPY; break; case '8': smileyType = SMILEY_HORNY; break; case '9': smileyType = SMILEY_PANIC; break; } } // funktion void smiley(int smileyType) { // kopf noFill(); ellipse(0, 0, 180, 180); // kopf // augen fill(0); if (smileyType == SMILEY_SAD) { ellipse(0 - 30, 0 - 30, 20, 5); // linkes augen ellipse(0 + 30, 0 - 30, 20, 5); // rechtes augen } else if (smileyType == SMILEY_DRUNK) { line(-50, -40, -10, -10); line(-50, -10, -10, -40); line(50, -40, 10, -10); line(50, -10, 10, -40); } else if (smileyType == SMILEY_ANGRY) { line(-50, -40, -10, -10); line(50, -40, 10, -10); ellipse(0 - 30, 0 - 10, 20, 5); ellipse(0 + 30, 0 -10, 20, 5); } else if (smileyType == SMILEY_OLD) { pushStyle(); strokeWeight(5); noFill(); ellipse(-30, -10, 50, 50); //brille ellipse(30, -10 , 50, 50); line(-100, -25, -57, -15); line(100, -25, 57, -15); line(-5, -10, 5, -10); popStyle(); pushStyle(); strokeWeight(2); line(-30, -45, 30, -45); //runzeln line(-32, -50, 32, -50); line(-34, -55, 34, -55); popStyle(); ellipse(0 - 30, 0 - 10, 20, 5); ellipse(0 + 30, 0 -10, 20, 5); } else if (smileyType == SMILEY_ASTOUND) { line(-50, -60, -20, -60); line(50, -60, 20, -60); ellipse(0 - 30, 0 - 30, 20, 20); // linkes augen ellipse(0 + 30, 0 - 30, 20, 20); } else if (smileyType == SMILEY_SLEEPY) { pushStyle(); strokeWeight(2); line(-40, 12, -25, 12); //augenringe line(-42, 8, -23, 8); line(40, 12, 25, 12); //augenringe line(42, 8, 23, 8); line(-34, -55, 34, -55); //runzel popStyle(); ellipse(0 - 30, 0 - 5, 20, 2); ellipse(0 + 30, 0 -5, 20, 2); } else if (smileyType == SMILEY_HORNY) { pushStyle(); strokeWeight(5); noFill(); ellipse(-30, -25 , 50, 50); //brille ellipse(30, -25 , 50, 50); ellipse(-30, -25 , 5, 5); //brille ellipse(30, -25 , 5, 5); line(0, 50, 0, 25); popStyle(); line(0, 100, 0, 125); line(-7, 100, -7, 105); line(7, 100, 7, 105); } else if (smileyType == SMILEY_PANIC) { pushStyle(); strokeWeight(2); noFill(); ellipse(-30, -25 , 50, 50); //auge ellipse(-30, -25 , 40, 40); ellipse(-30, -25 , 30, 30); ellipse(-30, -25 , 5, 5); ellipse(30, -25 , -50, 50); ellipse(30, -25 , -40, 40); ellipse(30, -25 , -30, 30); ellipse(30, -25 , -5, 5); popStyle(); } else { ellipse(0 - 30, 0 - 30, 20, 20); // linkes augen ellipse(0 + 30, 0 - 30, 20, 20); // rechtes augen } // mund noFill(); if (smileyType == SMILEY_SAD) arc(0, 60, 100, 100, radians(180+20), radians(360-20)); // mund else if (smileyType == SMILEY_DRUNK) { line(-50, 20, 50, 20); arc(-10, 15, 50, 70, radians(20), radians(180-20)); // mund } else if (smileyType == SMILEY_ANGRY) { line(-50, 10, 50, 20); } else if (smileyType == SMILEY_OLD) { arc(0, 20, 100, 100, radians(20), radians(180-20)); // mund } else if (smileyType == SMILEY_ASTOUND) { ellipse(0, 50 , 50, 50); // mund } else if (smileyType == SMILEY_SLEEPY) { ellipse(0, 50 , 70, 50); // mund } else if (smileyType == SMILEY_HORNY) { line(-50, 20, 50, 20); arc(-0, 10, 50, 120, radians(20), radians(180-20)); // mund } else if (smileyType == SMILEY_PANIC) { ellipse(0, 50 , 100, 50); // mund } else arc(0, 0, 100, 100, radians(20), radians(180-20)); // mund }