Hallo,
Ich programmiere gerade ein Spiel mit Fortschrittsbalken. Dieser Fortschrittsbalken ist nichts anderes, als eine simple Anzeige wielange ich noch Zeit habe um das Missionsziel zu erreichen.
Der Balken ist zu Spielbeginn auf 100% und grün. Mit Fortdauer des Spiels wird er zunächst gelblicher (50%), dann rötlicher (0%).
Nun zu meiner Frage:
Da ich mit jeden paintComponent() Aufruf den Balken aktualisiere muss ich für jeden Aufruf den aktuellen RGB Wert berechnen.
Wie ihr seht, erzeuge ich mit jedem Aufruf ein neues Color Object.
Ich habe keine Möglichkeit gefunden ein Object vom Typ Color nur einmal anzulegen und bei jedem Aufruf den aktuellen RGB Wert zu setzen. set() Methoden konnte ich in der sun Doku nicht finden.
Gibt es wirklich keine Möglichkeit ein bestehendes Color Object einen neuen RGB Wert anzugeben?
Es wäre doch weitaus performanter nicht ständig neue Objekte anzulegen.
Hier noch ein Code wie ich mir es vorstelle:
PS. Da es immer heißt man sollte swing und awt nicht mischen, gibt es auch von swing eine Color Klasse? Oder gilt diese Regel nur für Fensterelemente (Buttons, Textfelder, Panels ...).
Ich programmiere gerade ein Spiel mit Fortschrittsbalken. Dieser Fortschrittsbalken ist nichts anderes, als eine simple Anzeige wielange ich noch Zeit habe um das Missionsziel zu erreichen.

Der Balken ist zu Spielbeginn auf 100% und grün. Mit Fortdauer des Spiels wird er zunächst gelblicher (50%), dann rötlicher (0%).
Nun zu meiner Frage:
Da ich mit jeden paintComponent() Aufruf den Balken aktualisiere muss ich für jeden Aufruf den aktuellen RGB Wert berechnen.
Java:
private Color GetProcessColor(int TimeProcessPercentage)
{
double redPercentage = TimeProcessPercentage > 50 ? 255.0 - 255.0 / 50.0 * (TimeProcessPercentage-50.0) : 255;
double greenPercentage = TimeProcessPercentage < 50 ? 255.0 / 50.0 * TimeProcessPercentage : 255;
int r = java.lang.Math.max(0, (java.lang.Math.min(255, (int) redPercentage)));
int g = java.lang.Math.max(0, (java.lang.Math.min(255, (int) greenPercentage)));
int b = 0;
Color colorProgress = new Color(r, g, b);
return colorProgress;
}
Wie ihr seht, erzeuge ich mit jedem Aufruf ein neues Color Object.
Ich habe keine Möglichkeit gefunden ein Object vom Typ Color nur einmal anzulegen und bei jedem Aufruf den aktuellen RGB Wert zu setzen. set() Methoden konnte ich in der sun Doku nicht finden.
Gibt es wirklich keine Möglichkeit ein bestehendes Color Object einen neuen RGB Wert anzugeben?
Es wäre doch weitaus performanter nicht ständig neue Objekte anzulegen.
Hier noch ein Code wie ich mir es vorstelle:
Java:
private Color GetProcessColor(int TimeProcessPercentage)
{
double redPercentage = TimeProcessPercentage > 50 ? 255.0 - 255.0 / 50.0 * (TimeProcessPercentage-50.0) : 255;
double greenPercentage = TimeProcessPercentage < 50 ? 255.0 / 50.0 * TimeProcessPercentage : 255;
int r = java.lang.Math.max(0, (java.lang.Math.min(255, (int) redPercentage)));
int g = java.lang.Math.max(0, (java.lang.Math.min(255, (int) greenPercentage)));
int b = 0;
if(colorProgress==null) // member variable
colorProgress = new Color(r, g, b);
else
colorProgress.setRGB(r, g, b);
return colorProgress;
}
PS. Da es immer heißt man sollte swing und awt nicht mischen, gibt es auch von swing eine Color Klasse? Oder gilt diese Regel nur für Fensterelemente (Buttons, Textfelder, Panels ...).