Lernpfad:Einführung in Processing/8: Unterschied zwischen den Versionen
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Jneug (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 63: | Zeile 63: | ||
| <code>String einText = "Hallo Welt!";</code> | | <code>String einText = "Hallo Welt!";</code> | ||
|} | |} | ||
{{Aufgabe:Start}} | {{Aufgabe:Start}} | ||
Zeile 73: | Zeile 72: | ||
void draw() { | void draw() { | ||
int | int x1 = mouseX - 50; | ||
int | int y1 = mouseY - 30; | ||
int x2 = mouseX + 50; | |||
int y2 = mouseY + 30; | |||
background(200); | background(200); | ||
line(x1, y1, x2, y2); | |||
} | |||
</syntaxhighlight> | |||
{{Aufgabe:End}} | |||
== Globale und lokale Variablen == | |||
Nicht alle Variablen lassen sich überall benutzen. | |||
{{Aufgabe:Start}} | |||
Probier das Programm aus und lies die Fehlermeldung. Wo liegt der Fehler? Korrigiere das Programm. | |||
<syntaxhighlight lang="java" lines="1"> | |||
void setup() { | |||
size(400, 400); | |||
int a = 50; | |||
} | |||
void draw() { | |||
int x = 30; | |||
int y = 80; | |||
rect(x, y, a, a); | |||
} | |||
</syntaxhighlight> | |||
{{Aufgabe:End}} | |||
Wie du siehst, kann eine Variable aus <code>setup()</code> nicht in <code>draw()</code> benutzt werden. ''Das liegt daran, das Variablen nur in dem '''Block''' gültig sind, in dem sie deklariert werden.'' | |||
Wenn wir wieder an einen Schrank denken, dann könnte man sagen, der Schrank ist nur in dem Raum zugänglich, in dem er steht. Wenn ich in einem anderen Raum (Block) bin, habe ich keinen Zugriff mehr auf die Schubladen. | |||
Zur Erinnerung: Ein Block wird durch <code>{</code> und <code>}</code> markiert. | |||
Was aber, wenn sich eine Variable in gar keinem Block befindet? | |||
{{Aufgabe:Start}} | |||
# Probier das Programm aus. | |||
#: <syntaxhighlight lang="java" lines="1"> | |||
int frame = 0; | |||
void setup() { | |||
size(400, 400); | |||
frame = frame + 1; | |||
} | |||
void draw() { | |||
println(frame); | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
# Das Programm funktioniert. <code>frame</code> befindet sich außerhalb aller Blöcke und ist überall gültig. Sozusagen ''global''. | |||
#: Modifiziere es so, dass es die Anzahl an Frames zählt, die das Programm bisher läuft. (Jeder Aufruf von <code>draw()</code> ist ein Frame.) | |||
{{Aufgabe:End}} | |||
== Übungsaufgaben == | |||
{{Aufgabe:Start}} | |||
# Schreibe ein Programm, dass die Anzahl der Mausklicks mitzählt und auf die Zeichenfläche schriebt. | |||
#: {{P5js|https://preview.p5js.org/Ngb/present/5Eoro7V-I|Beispiel|height=100}} | |||
# Schreibe ein Programm, dass sich bei einem Mausklick die Mausposition merkt und eine Linie von der gespeicherten Position zur Maus zeichnet. | |||
#: {{P5js|https://preview.p5js.org/Ngb/present/aD6Gi1RTP|Beispiel|height=400}} | |||
{{Aufgabe:End}} | {{Aufgabe:End}} |
Version vom 7. November 2021, 21:29 Uhr
Interaktionen mit der Maus basieren auf besonderen Schlüsselwörtern wie mouseX
. Diese Schlüsselwörter nennt man Variablen.
Variablen kannst du dir wir Schubladen in einem Schrank vorstellen: Das Programm kann in jede Schublade etwas hineinlegen (einen Wert speichern) und dieses Etwas jederzeit wieder herausholen.
Processing legt vor jedem Aufruf von draw()
die aktuelle x-Koordinate der Maus als Zahl in die "Schublade" mit der Aufschrift mouseX
und dein Programm kann dann darauf zugreifen und diese Zahl benutzen. Dazu musst du nur den Namen der Schublade angeben. Praktisch, oder?
Variablen benutzen
Das schöne ist, das du auch selber Variablen anlegen und in ihnen etwas speichern kannst. Das hast du auch schon mehrfach getan. Kannst du dich erinnern, wann das war? Denk nochmal an die bisherigen Schritte...
Direkt in Schritt 3 hast du Variablen benutzt, um die Eingabe des ersten Algorithmus zu definieren:
int a = 3;
int b = 5;
println(a + b);
a
und b
sind auch Variablen. In Zeile 1 und 2 werden die Variablen deklariert (erstellt) und mit Werten initialisiert (befüllt). In Zeile 4 wird auf die Inhalte der Variablen zugegriffen, indem ihr Name angeben wird.
Variablen erstellen
Das sind immer die Schritte, die zur Benutzung einer neuen Variablen ausgeführt werden müssen:
- Deklaration
- Zuerst muss der Computer wissen, wieviel Speicherplatz benötigt wird und wie er diesen benennen soll. Der Computer sucht quasi im Schrank eine leere Schublade die groß genug ist und schreibt einen Namen drauf.
int a;
- Initialisierung
- Wir müssen in die neue Schublade nun zum ersten Mal etwas hineinlegen. Dazu weisen wir der Variablen einen Wert zu.
a = 3;
Verschiedene Arten von Daten benötigen mehr oder weniger Speicherplatz. Deshalb musst du bei der Deklaration angeben, von welchem Typ die Daten sind. Zum Beispiel steht int
für ganze Zahlen.
Wir konzentrieren uns auf folgende Datentypen:
Datentyp | Art der Daten | Beispiel |
---|---|---|
int
|
ganze Zahlen | int zahl = 5;
|
float
|
Dezimalzahlen (Kommazahlen) | float zahl = 5.3;
|
boolean
|
Wahrheitswerte (true und false )
|
boolean wahr = true;
|
char
|
Ein einzelnes Zeichen (Buchstabe, Ziffer, Sonderzeichen, ...)
Achtung: Ein |
char einKomma = ',';
|
String
|
Texte
Achtung: |
String einText = "Hallo Welt!";
|
- Probier dieses Programm aus.
void setup() { size(400, 400); } void draw() { int x1 = mouseX - 50; int y1 = mouseY - 30; int x2 = mouseX + 50; int y2 = mouseY + 30; background(200); line(x1, y1, x2, y2); }
Globale und lokale Variablen
Nicht alle Variablen lassen sich überall benutzen.
Probier das Programm aus und lies die Fehlermeldung. Wo liegt der Fehler? Korrigiere das Programm.
void setup() {
size(400, 400);
int a = 50;
}
void draw() {
int x = 30;
int y = 80;
rect(x, y, a, a);
}
Wie du siehst, kann eine Variable aus setup()
nicht in draw()
benutzt werden. Das liegt daran, das Variablen nur in dem Block gültig sind, in dem sie deklariert werden.
Wenn wir wieder an einen Schrank denken, dann könnte man sagen, der Schrank ist nur in dem Raum zugänglich, in dem er steht. Wenn ich in einem anderen Raum (Block) bin, habe ich keinen Zugriff mehr auf die Schubladen.
Zur Erinnerung: Ein Block wird durch {
und }
markiert.
Was aber, wenn sich eine Variable in gar keinem Block befindet?
- Probier das Programm aus.
int frame = 0; void setup() { size(400, 400); frame = frame + 1; } void draw() { println(frame); }
- Das Programm funktioniert.
frame
befindet sich außerhalb aller Blöcke und ist überall gültig. Sozusagen global.- Modifiziere es so, dass es die Anzahl an Frames zählt, die das Programm bisher läuft. (Jeder Aufruf von
draw()
ist ein Frame.)
- Modifiziere es so, dass es die Anzahl an Frames zählt, die das Programm bisher läuft. (Jeder Aufruf von
Übungsaufgaben
- Schreibe ein Programm, dass die Anzahl der Mausklicks mitzählt und auf die Zeichenfläche schriebt.
- Schreibe ein Programm, dass sich bei einem Mausklick die Mausposition merkt und eine Linie von der gespeicherten Position zur Maus zeichnet.