Erste Hilfe
› Processing Tutorials
› Processing Referenz (Tipp: Ausdruck markieren und [STRG]+[SHIFT]+T oder [CMD]+[SHIFT]+T)
› Processing Forum
Befehle und Sequenzen
Zeilenweise Befehle erteilen...
point(30,35); line(10,70,80,30); ellipse(60,65,20,20);
... bei tückischer Syntax (Worte zusammen, viele Leerzeichen oder Zeilenumbrühe entsprechen einem Leerzeichen) ...
point(30,35);
point (30,35);
point ( 30, 35);
point ( 30, 35);
(nicht:)
poi nt(30,35);...und Reihenfolge.
line(10,70,80,30); ellipse(60,40,20,20);
ellipse(60,40,20,20); line(10,70,80,30);↑
Canvas: Position, Form und Farbe
Größe variabel. Positionen: Von oben links (0,0) nach unten rechts (width, height).
size(200,200); rect(0,0,10,10);
rect(190,190,10,10);
bzw.
rect(width-10,height-10,10,10);
Farbe: R,G,B jeweils 0-255 (für Graufstufen nur ein Wert 0-255), Alpha für Transparenzen.
Background (Hintergrundfarbe), Stroke (Linien und Ränder) und Fill (Füllfarbe).
size(200,200); background(255,255,255); strokeWeight(5); stroke(255,0,0); fill(0,0,255); rect(20,20,100,100); noStroke(); fill(0,255,0,128); rect(80,80,100,100);
Dazu: strokeWeight, etc.
size(160,200); background(255,255,255); line(10,10,10,height-10); strokeWeight(2); line(20,10,20,height-10); strokeWeight(4); line(30,10,30,height-10); strokeWeight(10); line(50,10,50,height-10); strokeCap(ROUND); line(100,10,100,height-10); strokeCap(SQUARE); line(120,10,120,height-10); strokeCap(PROJECT); line(140,10,140,height-10);
Form: rect, ellipse, line, point, curves, 3D, ... Aber auch: ellipseMode, rectMode, ... Siehe: Reference: Shape
background(255); noStroke(); fill(221,89,123, 128); ellipseMode(CENTER); ellipse(50,50,20,20); ellipseMode(RADIUS); ellipse(50,50,20,20); ellipseMode(CORNER); ellipse(50,50,20,20); ellipseMode(CORNERS); ellipse(50,50,20,20);
Und schließlich: Shapes
size(400,400); background(128); fill(0); stroke(255); strokeWeight(8); strokeJoin(MITER); beginShape(); vertex(40, 40); vertex(width/2, 160); vertex(340, width/2); vertex(120, 360); endShape(CLOSE);
Aber auch: size() legt den Renderer fest. Beispiel: PDF
(Sketch, Import Library..., pdf)
import processing.pdf.*; size(200,200,PDF,"dateiname.pdf"); background(255,255,255); strokeWeight(5); stroke(255,0,0); fill(0,0,255); rect(20,20,100,100); noStroke(); fill(0,255,0,128); rect(80,80,100,100);↑
Kommentare
...werden von Processing ignoriert und sind nur für Menschen interessant.
// kurze Kommentare
/* lange ... Kommentare */↑
Variablen
Deklarieren: es gibt etwas mit einem Namen und einem Typ, z.B. mit Komma (float) oder ohne (int).
int px; float py;
initialisieren (Wert zuweisen/speichern), ...
px = 30; py = 35.0;
benutzen.
point(px,py); ellipse(px+30,py+30,20,20);
Mit dem Ergebnis einer Funktion füllen.
float px; px = random(100); float py = random(100); ellipse(px,py,20,20);
Variablen müssen nicht zwangsläufig reine Zahlen sein. Beispiel: Farbe
color hintergrund = color(255,100,0); background(hintergrund); color vordergrund = color(random(255),random(255),random(255)); noStroke(); fill(vordergrund); rect(10,10,80,80);↑
Debug: Textausgabe
Variablen ausgeben und anschauen. Mit und ohne Zeilenende.
float px; px = random(100); println(px); println(" ist der Wert von px."); print(px); println(" ist der Wert von px.");↑
Verhalten: Setup und Draw
Zwei Blöcke. Und die Zeilen davor (außerhalb der Blöcke). Zunächst werden Variablen festgelegt (deklariert und eventuell initialisiert).
Im setup werden Einstellungen vorgenommen.
Im draw-Loop wird gezeichnet (oder alles andere gemacht, was sich wiederholt).
float y = 150; void setup() { size(400,300); frameRate(25); background(255); } void draw() { strokeWeight(12); point(200,y); }
Durch das wiederholte Zeichnen wird Bewegung möglich.
float y = 150; void setup() { size(400,300); frameRate(25); background(255); } void draw() { y = random(0,height); strokeWeight(12); point(200,y); }
Das Übermalen des Hintergrunds löscht die Leinwand.
float y = 150; void setup() { size(400,300); frameRate(25); } void draw() { background(255); y = random(0,height); strokeWeight(12); point(200,y); }↑
Interaktion: Maus/Touch
Interaktion entsteht durch den Zugriff auf Nutzereingaben. Am einfachsten durch das Nutzen fertiger Variablen - z.B. mouseX und mouseY.
void setup() { size(400,300); frameRate(25); } void draw() { background(255); strokeWeight(12); point(mouseX,mouseY); }
void setup() { size(400,300); frameRate(25); } void draw() { background(255); strokeWeight(12); point(mouseX,mouseY); strokeWeight(1); line(mouseX,0,mouseX,height); }
Mausposition aus dem letzten Frame: pmouseX, pmouseY
void setup() { size(400,300); frameRate(25); background(255); } void draw() { strokeWeight(2); line(mouseX,mouseY,pmouseX,pmouseY); }
Klicks einfach: mousePressed (dazu die Frage: if).
void setup() { size(400,300); frameRate(25); background(255); } void draw() { strokeWeight(12); if (mousePressed) { point(mouseX,mouseY); } }
Interaktion speichern:
float lastClickX; float lastClickY; void setup() { size(400,300); frameRate(25); background(255); } void draw() { if (mousePressed) { strokeWeight(12); point(mouseX,mouseY); strokeWeight(1); line(mouseX,mouseY,lastClickX,lastClickY); lastClickX = mouseX; lastClickY = mouseY; } }↑
Fallunterscheidungen - Entweder: if...
Fragen stellen
if (Ja/Nein-Frage)
Es folgt eine Sequenz mit Anweisungen. Damit kenntlich ist, dass die Sequenz zur Frage gehört, wird sie in {} eingeschlossen.
if (Ja/Nein-Frage)
{
Anweisung1;
Anweisung2;
Anweisung3;
}
Zum Beispiel
float zahl = random(100);
if (zahl < 50)
{
point(30,35);
line(10,70,80,30);
ellipse(60,65,20,20);
}
↑
...oder: else
Wenn die Frage mit ja beantwortet wird, führe den ersten Block aus, ansonsten den zweiten.
if (Ja/Nein-Frage) { Anweisung1; Anweisung2; Anweisung3; } else { AndereAnweisung1; AndereAnweisung2; AndereAnweisung3; }
Zum Beispiel
float zahl = random(100); if (zahl < 50) { ellipse(60,65,20,20); } else { rect(60,65,20,20); }...oder interaktiv:
void setup() { size(400,300); frameRate(25); background(255); } void draw() { if (mouseX < width/2) { line(mouseX,0,mouseX,mouseY); } else { line(mouseX,height,mouseX,mouseY); } }↑
Mehrere Alternativen: if, else if, else
Wenn die Frage mit ja beantwortet wird, führe den ersten Block aus, ansonsten den zweiten, aber nur, wenn eine weitere Frage mit ja beantwortet wird. Usw.
if (Ja/Nein-Frage) { Anweisung1; Anweisung2; Anweisung3; } else if (neue Frage) { AndereAnweisung1; AndereAnweisung2; AndereAnweisung3; }Zum Beispiel
float zahl = random(100); if (zahl < 30) { ellipse(60,65,20,20); } else if (zahl < 60) { rect(60,65,20,20); } else { line(60,70,60,60); line(55,65,65,65); }↑
Schleifen: Wiederholung
Statt:
size(400, 200); background(255); line(5,5,5,195); line(15,5,15,195); line(25,5,25,195); line(35,5,35,195); line(45,5,45,195); line(55,5,55,195); // usw...
...eine Sequenz, die wiederholt wird:
for (Variable zum Zählen; Frage wann Ende; Art des Zählens)
{
Anweisung1;
Anweisung2;
Anweisung3;
}
size(400, 200);
background(255);
for (int i=0; i < 400; i = i+10)
{
line(5+i,5,5+i,195);
}
↑