NextMindAnmelden
ProgrammierenSpielgerüstSpickzettel

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.

Beispieldraw() läuft und läuft

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.

Dein VersuchProcessing

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.

Dein VersuchProcessing

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.

BeispielDer erste bewegte Ball
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.

BeispielSo funktioniert es NICHT
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.

BeispielKlick setzt den Ball zurück
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.

Dein VersuchProcessing

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?

Dein VersuchProcessing

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.

Dein VersuchProcessing

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.

Dein VersuchProcessing

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.

Dein VersuchProcessing

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.

Dein VersuchProcessing

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 / 5

Wie 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.