Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

Lektion 2-3 // Smileys // Mühsam aber befriedigend

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 nicht

int 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
}