Farbe eines Balles ändern (Java)?
Ich programmiere seit ungefähr einer Woche deswegen bitte ich jetzt schonmal um Entschuldigung falls es eine dumme Frage sein sollte aber ich habe ein kleines "Spiel" programmiert wo man auf Bälle klicken muss um diese verschwinden zu lassen oder sie verschwinden nach einer Zeit von alleine. Jetzt hatte ich noch die Idee das ich die Farbe der Bälle je nachdem wie lange sie noch auf dem Feld sind ändere weiß aber nicht wie ich dies Umsetzen kann und hoffe das ich hier eine Lösung finde.
Das ist ein Teil von dem Code den ich zu den Bällen geschrieben habe aber das gesamte zu der Farbe der Bälle ist dort zu sehen.
Ball(float xin, float yin, float din, int idin, Ball[] oin) {
x = xin;
y = yin;
diameter = din;
id = idin;
others = oin;
lifespan = random(2000.0 - 750.0) + 750;
radius = diameter/2;
circleColor = color(random(255),random(255), random(255));
}
1 Antwort
So wie ich das sehe, arbeitest du mit Processing, nicht Java.
Zum Lösungsverfahren:
Sobald ein Ball kreiert wird, wird ihm eine Lebensdauer zugewiesen. Das machst du schon. In der update-Funktion müsstest du folgend prüfen, wann eine Sekunde vergangen ist und dann die Lebenszeiten deiner Bälle aktualisieren (1 herunterrechnen) und überprüfen.
Nutze für den Timer millis. Zu Programmstart holst du dir die Startzeit und in draw holst du dir nochmal eine aktuelle Angabe (in einer zweiten Variable). Die Differenz zwischen aktueller Zeit und Startzeit muss 1000 betragen, dann ist eine Sekunde vergangen. Aktualisiere die Startzeit darauf, damit der Timer praktisch wieder auf 0 steht.
Alternativ könntest du auch einfach immer schauen, ob die aktuelle Zeit geteilt durch 1000 den Rest 0 ergibt.
Wenn gerade ein Zeitintervall (eine Sekunde) vergangen ist und einer deiner Bälle seine gesamte Lebenszeit aufgebraucht hat, darfst du ihn nicht mehr zeichnen. Das setzt voraus, dass du bei jedem Aufruf von update die Zeichenfläche einmal überzeichnest:
background(255);
// draw all other elements again ...
Es funktioniert doch nicht die Bälle bekommen die Lebensdauer zugewiesen und verschwinden auch nach der Zeit dann wieder das funktioniert schon alles aber mein Problem ist ja nur das ich nicht weiß wie ich die Farbe der Bälle ändere wenn sie nur noch z.B. 500 zu sehen sind sollen sie Rot werden. Das war ja das einzige Problem was ich habe der Rest funktionierte auch vorher schon
Wenn du die Lebenszeit aktualisierst (weil eine Sekunde vorbei ist), prüfst du im Anschluss einfach ebenso, ob der Ball noch 500s hat oder nicht.
if (ball.lifespan <= 500) {
Sollte dem so sein, änderst du seine Farbe:
ball.circleColor = color(255, 0, 0);
Ich gehe davon aus, dass du beim Zeichnen eines Balls die circleColor auch jedesmal verwendest.
fill(ball.circleColor);
circle(ball.x, ball.y, ball.radius);
Und dass muss ich dann einfach da hinschreiben wo momentan die Farbe vom Ball definiert wird oder hab ich das falsch verstanden
Spätestens bevor du den Ball zeichnest, musst du prüfen, ob er eine bestimmte Lebensphase schon überschritten hat oder nicht.
Du hast nur für ein bisschen Verwirrung bei mir gesorgt wo ich geschrieben hab dass ich mit Java programmiere meintest du ich nutze Processing und da ich immer noch kompletter anfänger bist wie du wahrscheinlich schon gemerkt hast wollte ich jetzt noch mal die vermutlich dümmste Frage überhaupt stellen und zwar ist Processing jetzt nh eigene Sprache also zum Programmieren oder einfach nur das Programm mit dem man andere Programme schreibt und Java die eigentliche Programmiersprache
Processing ist eine eigene Programmiersprache mit einer gleichnamigen Entwicklungsumgebung. Das ganze zugrundeliegende System (Entwicklungsumgebung und Kernfunktionalitäten für Processing) wurden mit Java entwickelt.
Könntest du mir evtl pls noch mal hierbei helfen ich verstehs wirklich nullhttps://www.gutefrage.net/frage/programm-beenden-in-java#answer-416406505
Ja ich arbeite mit Processing habe gedacht es wäre trotzdem Java wie gesagt ich habe letzte Woche erst damit angefangen und hatte davor wirklich gar keine Ahnung. Aber danke schonmal es funktioniert mittlerweile