Es bewegt sich
setup und draw, Variablen - und der Ball rollt zum ersten Mal.
Das kannst du danach
0 von 4 abgehakt- Du kannst erklären, warum draw() immer wieder läuft und setup() nur einmal.
- Du kannst Variablen mit dem passenden Typ anlegen und verändern.
- Du weißt, warum eine Variable außerhalb von draw() stehen muss, wenn sie sich etwas merken soll.
- Du hast das erste bewegliche Bauteil deines Spiels gebaut.
Melde dich an, um deinen Stand zu speichern.
Der Herzschlag deines Programms
Im letzten Kapitel hast du Bilder gezeichnet. Jetzt bringen wir sie zum Laufen — und das Geheimnis dahinter ist simpler, als du denkst.
draw() läuft nicht einmal, sondern immer wieder. Etwa 60-mal pro
Sekunde zeichnet Processing das Bild komplett neu. Ein Film ist ja auch
nichts anderes als viele Einzelbilder hintereinander.
frameCount zählt mit, das wievielte Bild gerade gezeichnet wird. Lass es
einen Moment laufen — die Zahl steht nie still.
Variablen: Dinge, die sich merken
Bisher standen in deinem Code feste Zahlen: circle(100, 80, 40). Der
Kreis sitzt damit für immer an derselben Stelle. Damit sich etwas bewegen
kann, brauchst du einen Platz, an dem sich das Programm eine Zahl
merkt — und den kannst du verändern. Das ist eine Variable.
Die drei Wörter, die du dafür brauchst
Für den Umgang mit Variablen gibt es Fachbegriffe. Die stehen später in jeder Fehlermeldung und in jedem Tutorial, deshalb hier gleich richtig:
Deklaration — die Variable anlegen. Du sagst, welchen Typ sie hat und wie sie heißt:
int punkte;
Damit existiert punkte, hat aber noch keinen brauchbaren Wert.
Zuweisung — einen Wert hineinlegen. Der Typ steht jetzt nicht mehr dabei, die Variable gibt es ja schon:
punkte = 0;
Deklaration mit Initialisierung — beides in einem Rutsch. Das ist der Normalfall, und so wirst du es fast immer schreiben:
int punkte = 0;
Initialisieren heißt schlicht „den ersten Wert setzen".
Die Typen
Beim Deklarieren sagst du, was für eine Art Wert darin stecken soll. Das ist der Typ:
int — ganze Zahlen, ohne Komma.
int punkte = 0;
int leben = 3;
Für alles, was man zählt: Punkte, Leben, Anzahl der Blöcke. Eine Kommazahl passt hier nicht hinein.
float — Zahlen mit Nachkommastellen.
float tempo = 2.5;
float x = 100.0;
Für alles, was fein einstellbar sein soll. Positionen und
Geschwindigkeiten macht man fast immer zu float — sonst kann sich etwas
nur in ganzen Pixeln bewegen, und das ruckelt.
boolean — kennt nur zwei Werte: true oder false.
boolean laeuft = true;
boolean istGetroffen = false;
Für Ja-Nein-Fragen: Läuft das Spiel gerade? Wurde schon getroffen?
char — ein einzelnes Zeichen, in einfachen Anführungszeichen.
char taste = 'w';
char note = 'A';
Für einzelne Tasten: Welche wurde gedrückt? In Kapitel 3 fragst du damit die Tastatur ab.
String — Text, immer in doppelten Anführungszeichen.
String name = "Ball";
String nachricht = "Game Over";
color — eine Farbe, die du dir merken willst. Die gibt es nur in
Processing, nicht in normalem Java.
color rot = color(220, 40, 40);
fill(rot);
Praktisch, wenn dieselbe Farbe an mehreren Stellen vorkommt: Du änderst sie dann nur an einer Stelle.
Selbst ausprobieren
Übung 2.1Level 1Die fehlenden Variablen
Der Sketch benutzt drei Variablen, die es noch gar nicht gibt — deshalb läuft er nicht. Deklariere sie und gib ihnen gleich einen Startwert.
Überleg bei jeder einzeln, welcher Typ passt. Das sind genau die drei Sorten, die dein Spiel später braucht: eine Position, ein Text und ein Zähler.
Tipp: Strg + Eingabe führt den Code aus.
Übung 2.2Level 2Eine Farbe, an einer Stelle änderbar
Drei Formen, dieselbe Farbe — dreimal getippt. Stell dir vor, es wären dreißig.
Bau eine Variable vom Typ color ein, lege die Farbe dort einmal an
und benutze sie überall. Ändere danach die Farbe auf Grün — indem du
eine einzige Zeile anfasst.
Genau dafür sind Variablen da: Ein Wert steht an einer Stelle, nicht an dreißig.
Tipp: Strg + Eingabe führt den Code aus.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
In diesem Abschnitt stecken mehrere Dinge auf einmal. Hak einzeln ab, was schon sitzt — dann siehst du selbst, was noch fehlt, und deine Lehrkraft sieht es auch.
Die Bausteine dieses Abschnitts
0 von 10 abgehakt- Wozu Variablen da sind: sich einen Wert merken und ihn ändern können
- Deklaration — eine Variable anlegen: Typ, Name, Semikolon
- Wertzuweisung — einen Wert hineinlegen, und warum = nicht „ist gleich“ heißt
- int — ganze Zahlen (Punkte, Leben, Anzahl)
- float — Kommazahlen (Positionen, Geschwindigkeiten)
- char — ein einzelnes Zeichen in einfachen Anführungszeichen
- boolean — true oder false, für Ja-Nein-Fragen
- String — Text in doppelten Anführungszeichen
- Den passenden Typ auswählen: wann int, wann float?
- Sprechende Namen vergeben (tempo statt t, klein anfangen, keine Umlaute)
Melde dich an, um deinen Stand zu speichern.
So entsteht Bewegung
Der ganze Trick besteht aus zwei Zeilen: Du zeichnest den Kreis an der
Stelle x — und danach machst du x ein bisschen größer. Beim nächsten
Bild sitzt er also weiter rechts.
float x = 0;
void setup() {
size(360, 160);
}
void draw() {
background(250);
noStroke();
fill(70, 130, 220);
circle(x, 80, 40);
x = x + 2; // beim nächsten Bild ein Stück weiter
}Erst überlegen
Die Zeile x = x + 2; ist als Gleichung offensichtlich falsch — keine Zahl ist zwei größer als sie selbst. Warum ist die Zeile beim Programmieren trotzdem völlig in Ordnung?
Die wichtigste Falle
Schau dir an, wo float x = 0; im Beispiel oben steht: ganz oben,
außerhalb von setup() und draw(). Das ist kein Zufall.
Der folgende Sketch sieht fast genauso aus. Der einzige Unterschied: Die
Variable ist eine Zeile nach innen gerutscht, in draw() hinein. Lass ihn
laufen, bevor du weiterliest.
void setup() {
size(360, 150);
}
void draw() {
background(250);
float x = 0;
x = x + 2;
noStroke();
fill(200, 70, 70);
circle(x, 75, 40);
}Erst überlegen
Der Ball rührt sich nicht vom Fleck — obwohl x = x + 2; doch bei jedem Bild ausgeführt wird. Wo bleibt die Bewegung?
Auf Klick und Taste reagieren
Bisher hast du zwei Funktionen kennengelernt, die Processing von selbst
aufruft: setup() einmal am Anfang, draw() immer wieder. Es gibt noch
zwei weitere — und die laufen genau dann, wenn jemand etwas tut.
void mousePressed() wird aufgerufen, sobald geklickt wird. Du musst
nichts abfragen und nichts prüfen: Processing ruft die Funktion auf, und
zwar genau einmal pro Klick.
float x = 0;
void setup() {
size(400, 180);
}
void draw() {
background(250);
noStroke();
fill(70, 130, 220);
circle(x, 90, 40);
x = x + 3;
fill(120);
textSize(14);
text("Klick ins Bild", 15, 25);
}
// Läuft automatisch, sobald jemand klickt.
void mousePressed() {
x = 0;
}Genauso funktioniert void keyPressed() für die Tastatur:
void keyPressed() {
x = 0;
}
Erst überlegen
In mousePressed() steht nur eine Zeile: x = 0; Warum reicht das, damit der Ball von vorn losläuft — ohne dass dort irgendetwas gezeichnet wird?
Neue Werkzeuge
Werte, die Processing dir gibt
AufgabenÜbungen
Übung 2.3Level 1Nach unten statt nach rechts
Der Kreis rollt nach rechts. Ändere das Programm so, dass er stattdessen von oben nach unten fällt.
Tipp: Strg + Eingabe führt den Code aus.
Übung 2.4Level 3Zwei Bälle, zwei Geschwindigkeiten
Lass einen zweiten Ball darunter laufen, der doppelt so schnell ist. Überleg vorher: Warum reicht eine Variable dafür nicht?
Tipp: Strg + Eingabe führt den Code aus.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Übung 2.5Level 2Der Schläger folgt der Maus
Der graue Schläger unten klebt an einer festen Stelle. Sorg dafür, dass er der Maus folgt — und zwar so, dass der Mauszeiger in seiner Mitte sitzt, nicht an der linken Ecke.
Das ist schon ein echtes Bauteil deines Spiels.
Tipp: Strg + Eingabe führt den Code aus.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Übung 2.6Level 2Schräg über die Fläche
Der Kreis läuft bisher nur waagerecht. Schick ihn schräg über die Fläche — von links oben nach rechts unten.
Tipp: Strg + Eingabe führt den Code aus.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Übung 2.7Level 1Die Spur
Bisher wird die Fläche bei jedem Bild sauber übermalt. Sorg dafür, dass der Kreis stattdessen eine Spur hinterlässt.
Danach weißt du auch, warum ein vergessenes background() diesen Effekt
aus Versehen erzeugt.
Tipp: Strg + Eingabe führt den Code aus.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Übung 2.8★ SternaufgabeDer Kreis, der nie verschwindet
Der Kreis läuft rechts hinaus und kommt nie wieder. Bring ihn dazu, links wieder hereinzukommen — ohne eine Bedingung zu benutzen. Die lernst du erst im nächsten Kapitel.
Es geht mit einem einzigen zusätzlichen Zeichen.
Tipp: Strg + Eingabe führt den Code aus.
Sternaufgabe. Die zählt nicht zum Fortschritt — du verlierst also nichts, wenn du sie auslässt. Schaffst du sie, gibt es dafür einen Stern.
Zu dieser Aufgabe gibt es bewusst keine Musterlösung. Es gibt mehrere richtige Wege — speichere deinen, dann kann er im Unterricht besprochen werden.
Jetzt du
Dein SpielDas bewegliche Bauteilin der Processing-IDE
Bau das erste bewegliche Teil deines Spiels — auf dem Spielfeld aus Kapitel 1.
Aim Trainer: Ein Fadenkreuz, das der Maus folgt. Dazu ein Ziel, das
langsam größer wird (frameCount hilft dir dabei).
Pong: Der Schläger folgt der Maus, der Ball bewegt sich schräg über das Feld. Dass er noch verschwindet, ist in Ordnung — das reparieren wir im nächsten Kapitel.
Breakout: Der Schläger folgt der Maus, der Ball fällt nach unten.
Arbeite in der Processing-IDE, du brauchst das Ergebnis dort weiter.
Sichere deinen Code zusätzlich selbst — auf einem Stick oder in deiner Cloud — und lade ihn am Ende auch in den Moodle-Kurs hoch.
Sitzt das?
1 / 5Wie oft läuft draw() bei einem laufenden Programm?
Was noch fehlt
Ist dir beim Ball etwas aufgefallen? Er rollt nach rechts — und dann ist er weg. Für immer.
Was fehlt, ist eine Entscheidung: Wenn der Ball den Rand erreicht, dann soll er umkehren. Dein Programm macht bisher stur immer dasselbe, egal was auf der Fläche los ist.
Genau darum geht es im nächsten Kapitel.