Processing: Wie kann ich viele Kugeln zu zufälligen Zeitpunkten von oben nach unten schicken?
Hi,
ich habe ein Problem bei folgendem Code:
float farbtonR, farbtonG, farbtonB;
float durchmesser;
float Zeit;
float x;
float geschwindigkeit;
float xKugel;
int background = 0;
int hoehe = 0;
void setup() {
size(500, 500);
background(background);
neueKugel();
}
void draw() {
komplett();
}
void neueKugel() {
farbtonR = random(255);
farbtonG = random(255);
farbtonB = random(255);
x = random(501);
durchmesser = random(20, 26);
geschwindigkeit = random(20);
xKugel = x - durchmesser / 2;
fill(farbtonR, farbtonG, farbtonB);
ellipse(x, hoehe, durchmesser, durchmesser);
}
void gleicheKugel() {
fill(farbtonR, farbtonG, farbtonB);
ellipse(x, hoehe, durchmesser, durchmesser);
}
void komplett() {
fill(background);
rect(xKugel, 0, durchmesser, 500);
delay((int)geschwindigkeit);
hoehe++;
gleicheKugel();
}
Mein Ziel ist es, viele Kugeln zu zufälligen Zeitpunkten von oben nach unten zu schicken. Nun habe ich zwar eine, habe aber keine Ahnung, wie ich parallel zu dieser noch andere einfügen kann.
MfG Fabi
[Anmerkung: Kontaktanfrage entfernt]
1 Antwort
Mit Klassen und Objekten hast du dich sicherlich noch nicht befasst? Weil dann könnte man alle Elemente, die deine eine Kugel beschreiben, zusammenfassen.
Wenn du noch nicht so weit bist: Nicht schlimm. Arbeite mit Arrays. Zum Beispiel ein Array für den y-Wert deiner Kugeln, oder ein Array für den x-Wert deiner Kugeln, etc.. Die Anzahl an Kugeln kannst du in einer eigenen Variable zwischenspeichern, die du auch beim Anlegen der Arrays verwendest.
int[] xCoordinatesOfBalls = new int[numberOfBalls];
// etc. ...
Über die Arrays iterierst du schließlich mit einer Schleife.
for (int i = 0; i < numberOfBalls; ++i) {
ellipse(xCoordinatesOfBalls[i], yCoordinatesOfBalls[i], ballDiameters[i]);
}
So werden verschiene Ellipsen an verschiedenen Positionen mit unterschiedlichem Durchmesser gezeichnet.
Dieses Prinzip lässt sich auch noch auf weitere Eigenschaften (Farbe, Geschwindigkeit, etc.) ausweiten. Die Farbe kannst du im Übrigen in einen Datentyp zusammenfassen.
Beispiel:
color red = color(255, 0, 0);
1) Neben einer zufälligen Geschwindigkeit kannst du eine Zufallszahl im negativen Bereich für den y-Startwert einer jeden Kugel auswürfeln.
random(-10, 0);
Um neue Kugeln zu produzieren, kannst du zuerst einmal die alten Kugeln, die unten über den Bildschirmrand gelaufen sind, überschreiben bzw. an den Stellen einfach die Position neu setzen (vielleicht auch Farben, Geschwindigkeit, u.ä.). Dazu musst du nur je Zeichenvorgang prüfen, ob sie schon aus dem Sichtbereich sind oder nicht.
Um eine entsprechende Menge an Kugeln auf die Fläche zu bringen, könntest du ein zweidimensionales Array erzeugen.
int[][] y = new int[][] [
[ /* row 1 values ... */ ],
[ /* row 2 values ... */ ],
/* etc. ... */
];
Der Zugriff auf ein bestimmtes Feld sieht so aus:
y[0][2]
In diesem Fall würdest du von der ersten Reihe das zweite Element erhalten.
2) Der Durchmesser deiner Kugeln beträgt maximal 26. Das heißt, dies muss auch der Mindestabstand für die x-/y-Koordinaten sein, die erzeugt werden.
hi,
vielen Dank!
hab mir noch ein Video zu Arrays angeschaut und mein Code schaut jz so aus:
int Kugeln=5;
int[] farbtonR=new int[Kugeln];
int[] farbtonG=new int[Kugeln];
int[] farbtonB=new int[Kugeln];
int[] durchmesser=new int[Kugeln];
int[] x=new int[Kugeln];
int[] geschwindigkeit=new int[Kugeln];
int[] xKugel=new int[Kugeln];
int background = 0;
int hoehe = 0;
void setup() {
size(500, 500);
background(background);
neueKugel();
}
void draw() {
komplett();
}
void neueKugel() {
for (int i = 0; i < x.length; ++i) {
farbtonR[i]=(int)random(255);
farbtonG[i]=(int)random(255);
farbtonB[i]=(int)random(255);
x[i]=(int)random(501);
durchmesser[i]=(int)random(20, 26);
geschwindigkeit[i]=(int)random(20);
xKugel[i]=x[i]-durchmesser[i]/2;
fill(farbtonR[i], farbtonG[i], farbtonB[i]);
ellipse(x[i], hoehe, durchmesser[i], durchmesser[i]);
}
}
void gleicheKugel() {
for (int i = 0; i < x.length; ++i) {
fill(farbtonR[i], farbtonG[i], farbtonB[i]);
ellipse(x[i], hoehe, durchmesser[i], durchmesser[i]);
}
}
void komplett() {
for (int i = 0; i < x.length; ++i) {
fill(background);
rect(xKugel[i], 0, durchmesser[i], 500);
delay((int)geschwindigkeit[i]);
hoehe++;
gleicheKugel();
}
}
mir persönlich fehlen jz aber noch zwei Sachen bei denen Ich wieder hänge.