Was muss ich am Code ändern?
Was muss ich am Code ändern, damit nicht durchgehend Quadrate gezeichnet werden sondern nur ein mal pro Maus Klicken + loslassen ?
2 Antworten
Um sicherzustellen, dass nur ein Quadrat pro Maus-Klick und -Loslassen gezeichnet wird, kannst du den Code so anpassen, dass das Zeichnen nur im
mouseReleased()
-Event stattfindet. Hier ist ein Beispiel, wie du das machen könntest:
- Variablen definieren:Füge Variablen hinzu, um die Startposition des Quadrats zu speichern.
- Zeichnen im
mouseReleased()
- -Event:Zeichne das Quadrat nur, wenn die Maus losgelassen wird.
int x1, y1;
boolean isDrawing = false;
void setup() {
size(400, 300);
background(255, 255, 255);
fill(255, 0, 0);
}
void draw() {
// Hintergrund neu zeichnen, um alte Quadrate zu löschen
background(255, 255, 255);
if (isDrawing) {
rect(x1, y1, abs(mouseX - x1), abs(mouseY - y1));
}
}
void mousePressed() {
x1 = mouseX;
y1 = mouseY;
isDrawing = true;
}
void mouseReleased() {
isDrawing = false;
// Zeichne das Quadrat endgültig
rect(x1, y1, abs(mouseX - x1), abs(mouseY - y1));
}
In diesem Code wird das Quadrat nur gezeichnet, wenn die Maus losgelassen wird. Während des Ziehens wird das Quadrat in der
draw()
-Funktion vorübergehend angezeigt, aber das endgültige Zeichnen erfolgt im
mouseReleased()
-Event.
Alles klar, vielen Dank für diese sehr ausführliche Erklärung ! Werde ich gleich mal ausprobieren. ☺️
Setze deine boolsche Variable isDrawing erst in mouseReleased auf true und direkt nach dem Zeichnen des Rechtecks auf false. Dann wird das Rechteck erst gezeichnet, sobald du die Maustaste loslässt.
Du könntest stattdessen aber auch vor jedem Zeichenvorgang deines gezogenen Rechtecks die Zeichenfläche einmal leeren.
if (isDrawing) {
background(255, 255, 255);
/* ... */
Dann bleibt nur der Rahmen des aktuell gezogenen Rechtecks. Alle anderen Elemente, die dabei überzeichnet wurden, müssen neu gezeichnet werden.
Alles klar vielen Dank, werde ich später mal ausprobieren. 👍🏻