Inf9 3.2: Attribute, draw() und setup() Methode

Zu den Aufgaben

Processing ist eine Art „Game Engine“, die es uns ermöglicht relativ schnell und einfach Spiele zu programmieren. Bisher konnten wir nur statische Zeichnungen erstellen. Nun sind die meisten Spiele jedoch so gestaltet, dass sich irgendetwas auf dem Bildschirm bewegt.

Um ein Rechteck mit der Breite 20 und Höhe 25 an der Stelle (30|100) zu erstellen haben wir bisher den Befehl rect(30,100,20,25); verwendet. Wenn dieses Rechteck sich nun bewegen soll, müssen die Koordinaten des Rechteckes sich zur Laufzeit des Programmes verändern können.

Um Werte zur Laufzeit eines Programmes verändern und diesen veränderten Wert speichern zu können braucht man globale Attribute. Attribute sind somit Speicher, der zur Verfügung gestellt wird, um Werte/Dinge zwischen zu speichern.

Merksatz 1.2.1

Möchten wir nun beispielsweise die x-Koordinate des Rechtecks zur Laufzeit des Programmes verändern brauchen wir nun also einen Zwischenspeicher, der die Zahl der x-Koordinate speichert.

Attribute werden am Anfang eines Programmes deklariert. Zahlen speichert man mit dem Datentyp Integer. Die Deklaration eines Attributs besteht aus dem Datentyp und dem Bezeichner des Attributes, mit dem das Attribut im folgenden Code angesprochen werden kann.

Merksatz 1.2.2

Um beispielsweise die Zahl „x-Koordinate“ zu speichern verwenden wir folgenden Code:

int xRechteck;

Der Datentyp ist hier int (Integer), also eine Zahl. Mit dem Bezeichner xRechteck können wir nun im folgenden Code auf den Wert des Attributes zugreifen.

Die Zahl xRechteck hat nun noch nicht den Wert, den wir haben wollen. Wir erinnern uns, wir wollten mit dem Startwert 30 für xRechteck beginnen.

Um einem Attribut einen Startwert zuzuweisen brauchen wir eine sogenannte Zuweisung. Zuweisungen in Java gehen nach der Syntax AttributBezeichner = NeuerWert.

Die initialen Startwerte definiert man in Processing innerhalb der void setup() Methode. Die setup() Methode wird direkt nach den Attributen deklariert. Der Inhalt einer Methode wird in geschweiften Klammern zusammengefasst.

Merksatz 1.2.3

In unserem Beispiel brauchen wir nun also folgenden anschließenden Code:

void setup()
{
   xRechteck = 25;
}
//Definition der setup() Methode
//Klammer als Start der Methode
//Zuweisung neuer Wert 25
//Ende der Methode

Nun wird das Rechteck noch nicht gezeichnet, da wir noch keinen rect Befehl geschrieben haben. Ähnlich wie Fernseher, wird das Bild eines Programmes mit einer gewissen Framerate aktualisiert. Die Zeichnung, die bei jeder Aktualisierung gemacht wird, können wir in Processing mit der void draw() Methode beeinflussen.

Die Aktualisierung der Oberfläche von Processing wird in der void draw() Methode verwirklicht.

Merksatz 1.2.4

In unserem Beispiel möchten wir das Rechteck zeichnen. Für die x-Koordinate müssen wir nun allerdings nicht mehr einen festen Wert eingeben, sondern unser Attribut verwenden, da der Wert sich ja ändern soll. Somit sieht die void draw() Methode erst einmal so aus:

void draw() {
    rect(xRechteck,100,25,20);
 }
//Definition draw Methode
//Start der Methode
//Zeichnen Rechteck
//Ende der Methode

Wenn wir jetzt Ausführen haben wir schon mal das Rechteck. Allerdings bewegt es sich nicht. Wenn wir nun jedoch in der draw() Methode die Zuweisung ergänzen, die den Wert von xRechteck immer wieder um 1 erhöht, bewegt sich das Rechteck nach rechts. Nun müssen wir nur noch am Anfang der Methode jedes mal den Hintergrund neu zeichnen, weil wir sonst immer nur neue Rechtecke zeichnen, aber nie die alten löschen:

void draw() {
    background(100);
    rect(xRechteck,100,25,20);
    xRechteck = xRechteck+1;
 }
//Definition der Methode
//Klammern für den Start
//Hintergrund neu zeichnen
//Rechteck zeichnen
//Rechteck um eins nach rechts
//Ende der Methode

Wir sehen nun, dass das Objekt sich nach rechts aus dem Bild bewegt.


Aufgabe 1:

  • Implementiere in Processing die setup()  Methode. Dabei soll die Größe des Fensters auf Breite 400 und Höhe 300 gesetzt werden.
  • Erstelle Attribute für die Zahlen breitehoehexRechteck und yRechteck.
  • Weise den globalen Attributen eigene Werte in der setup() Methode zu.

Aufgabe 2:

  • Implementiere die draw() Methode.
  • Lasse die draw() Methode dein Rechteck mit den Werten der globalen Attribute zeichnen.
  • Lasse das Rechteck nach rechts aus dem Bildschirm wandern, indem du den Wert des Attributes xRechteck in draw() veränderst.
  • Kannst du erklären, warum das Rechteck nach rechts wandert? Warum zieht es einen schwarzen Streifen hinter sich her?
  • Der Befehl background(200) kann den Hintergrund des Zeichenfensters neu zeichnen. Probiere aus, wo du den Befehl in der draw() Methode einfügen musst, damit der schwarze Streifen hinter dem Rechteck verschwindet.

Aufgabe 3:

  • Erstelle neue globale Variablen radiusxMittelpunktyMittelpunkt und weise ihnen in der setup() Methode eigene Werte zu, so dass der Kreis am unteren Rand der Zeichenfläche ist.
  • Lasse in der draw() Methode den Kreis von unten nach oben wandern.

Aufgabe 4:

  1. Erstelle alle Attribute, die nötig sind um einen Schneemann zu zeichnen und ihn mit der draw() Methode wandern zu lassen.
  2. Processing bietet automatisch die (unsichtbaren) globalen Attribute mouseX und mouseY zum Abfragen, welche Position auf der Zeichenfläche der Mauscursor hat. Baue eine Form ein, die sich durch das Bewegen der Maus verändert.
  3. Weitere Anregungen für dein eigene Animation:
    a. Man kann auch Farben verändern.
    b. Der Hintergrund ist langweilig 😉
    c. Wir haben bereits Polygone und Bögen gelernt. Vielleicht kannst du damit etwas Lustiges machen.
    d. …

Lösungen der Aufgaben (nur für Abonnenten):

Hier findest du alle Lösungen der Aufgaben dieses Kapitels.


Zurück zur Übersicht