Bisher haben wir uns vor allem um die grundlegenden Befehle von Processing gekümmert. Nun sollen die Programme auch etwas mehr Anspruch erhalten und auf verschiedene Bedingungen reagieren können. Dies geschieht, wie in der Programmierung üblich, mit Hilfe von If-Abfragen. Ein Beispiel dafür ist folgendes:
int xPos = 0; int v = 3; void setup() { size(600, 400); } void draw() { background(0); stroke(255, 0, 0); strokeWeight(10); xPos = xPos + v; // Verzweigung if (xPos > width) { xPos = 0; } point(xPos, height / 2); }
Vollziehe zunächst das Beispiel nach.
Die Verzweigung sorgt dafür, dass der rote Punkt nach Verlassen des Bildschirms auf der rechten Seite wieder links anfängt.
a) Ändere das obige Programm so ab, dass der Punkt alle 150px seine Farbe ändert.
b) Ändere das Programm so ab, dass der Punkt sich von links oben nach rechts unten bewegt und zunehmend größer wird.
int xPos = 0; int v = 3; void setup() { size(600, 400); } void draw() { background(0); stroke(255, 0, 0); strokeWeight(10); xPos = xPos + v; // Verzweigung if (xPos > width){ xPos = 0; } // Änderung der Farbe des Punktes if (xPos > 150) { stroke(0, 255, 0); } if (xPos > 300) { stroke(0, 0, 255); } if (xPos > 450) { stroke(255, 255, 0); } point(xPos, height / 2); }
float xPos = 0; float yPos = 0; // Geschwindigkeit angepasst an die Fenstergröße float v1 = 3; float v2 = 2; // Größe des Punktes float g = 10; void setup() { size(600, 400); } void draw() { background(0); stroke(255, 0, 0); strokeWeight(g); xPos = xPos + v1; yPos = yPos + v2; // Vergrößerung des Punktes bei jeder Aktualisierung g = g + 0.1; // Verzweigung if (xPos > width || yPos > height) { xPos = 0; yPos = 0; } // Änderung der Farbe des Punktes if (xPos > 150) { stroke(0, 255, 0); } if (xPos > 300) { stroke(0, 0, 255); } if (xPos > 450) { stroke(255, 255, 0); } point(xPos, yPos); }
a) Ein Ball soll sich auf der Zeichenfläche von links nach rechts bewegen und dann jeweils von der Seite abprallen und sich wieder zurückbewegen. Bei jedem Abprall ändert er zudem seine Farbe.
b) Der Ball soll sich nun beliebig auf der Zeichenfläche bewegen und jeweils vom Rand abprallen. (Auf die Farbänderung kann nun verzichtet werden.)
// Startpunkt x=10 statt x=0, da sonst die zweite Bedingung den Start blockiert float x = 10; // Geschwindigkeit float a = 5; void setup() { size(800, 400); // Farbe des Kreises bei Programmstart fill(255, 255, 0); } void draw() { background(0); // Abprallen von der rechten Kante. Richtungswechsel durch Vorzeichenumkehr bei der Geschwindigkeit if (x > width - 10) { a = -a; fill(255, 0, 0); } // Abprallen von der linken Kante if (x < 10) { a = -a; fill(255, 255, 0); } ellipse(x, 100, 20, 20); x = x + a; }
// Startposition des Balles float x = 100; float y = 100; // Geschwindigkeit des Balles in x- bzw. y-Richtung float vX = 2; float vY = 6; void setup() { size(300, 300); } void draw() { background(0); // Bewegung des Balles x = x + vX; y = y + vY; // Überprüfen, ob der Ball abprallt if ((x > width - 10) || (x < 10)) { vX = -vX; } if ((y > height - 10) || (y < 10)) { vY = -vY; } // Ball zeichnen fill(255); ellipse(x, y, 20, 20); }
In folgendem Feld bewegt sich ein Kreis fortlaufend von links nach rechts. Solange er im schwarzen Feld ist, ist er weiß, läuft er durch das weiße Feld, ist er schwarz. Löse das Problem mit einer if-else-Anweisung.
float x = 0; void setup() { size(300, 200); } void draw() { background(255); noStroke(); fill(0); rect(0, 0, 100, 200); rect(200, 0, 100, 200); if (x > 100 && x < 200) { fill(0); } else { fill(255); } ellipse(x, 100, 30, 30); x = x + 1; if (x > 300) { x = 0; } }