Was muss ich am Code ändern?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

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.
  1. Zeichnen im 
  2. mouseReleased()
  • -Event:Zeichne das Quadrat nur, wenn die Maus losgelassen wird.
Hier ist eine angepasste Version deines Codes:
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.


Blackshadow1577 
Beitragsersteller
 15.09.2024, 16:34

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.


Blackshadow1577 
Beitragsersteller
 14.09.2024, 19:43

Alles klar vielen Dank, werde ich später mal ausprobieren. 👍🏻