Processing: "Schachbrett" blinken lassen?
Hallo, ich habe in Processing folgenden Code geschrieben und nun stehe ich vor der Aufgabe, dass per Klick auf ENTER alle Rechtecke bunt blinken sollen und bei erneutem Klick auf ENTER das Blinken wieder aufhört.
Leider habe ich schon ewig herumprobiert, aber nichts klappt. Wie geht das?
Code:
int farbe1 = 255;
int farbe2 = 0;
float feldbreite;
float feldhoehe;
float feldanzahl = 8;
void setup() {
size(500, 500);
feldbreite = width / feldanzahl;
feldhoehe = height / feldanzahl;
}
void draw() {
for (int zeile = 0; zeile <= feldanzahl; zeile = zeile + 1) {
int farbaenderung = 1;
if (zeile % 2 == 0) {
farbaenderung = -1;
}
for (int spalte = 0; spalte <= feldanzahl; spalte = spalte + 1) {
farbaenderung = -farbaenderung;
if (farbaenderung > 0) {
fill(farbe1);
}
else {
fill(farbe2);
}
rect(feldbreitezeile, feldhoehespalte, feldbreite, feldhoehe);
noStroke();
}
}
}
1 Antwort
(...) per Klick auf ENTER (...)
Lässt du dir diesen Text irgendwo ausgeben oder meinst du doch einen Druck auf die Entertaste? Ich gehe folgend von ersterem aus.
Zuerst einmal kannst du prüfen, ob der Nutzer überhaupt einen Klick durchgeführt hat. Dies funktioniert mit mouseClicked. In der Folge kannst du via mouseX und mouseY die Mausposition überprüfen. Liegt sie in den Grenzen des Textfeldes ENTER? Wenn ja, setze eine Flag-Variable. Wenn dieser Flag bei Klick schon aktiv ist, sollte er wieder deaktiviert werden.
Pseudocode:
boolean blink = false
enterTextX = 0
enterTextY = 0
enterTextWidth = 100
enterTextHeight = 100
draw()
drawText(enterTextX, enterTextY, enterTextWidth, enterTextHeight, "Enter")
// draw rectangles
mouseClicked()
if mouseX and mouseY in range of enterText field
blink = !blink
Das Blinken der Vierecke kann man ja ganz einfach durch das Wechseln der Farbe erzeugen. Wenn der Flag gesetzt ist, könnte je draw call eine Zufallsfarbe generiert werden:
if blink
fill(randomRed, randomBlue, randomGreen)
else
fill(255)
rect(someX, someY, someWidth, someHeight)