Estou escrevendo um jogo em Java e quero implementar um medidor de energia para determinar com que intensidade você vai atirar em algo.
Preciso escrever uma função que tenha um int entre 0 - 100 e, com base em quão alto é esse número, ele retornará uma cor entre Verde (0 na escala de potência) e Vermelho (100 na escala de potência).
Semelhante à maneira como os controles de volume funcionam:
Que operação eu preciso fazer nos componentes Vermelho, Verde e Azul de uma cor para gerar as cores entre Verde e Vermelho?
Então, eu poderia dizer, getColor(80)
e ele retornará uma cor alaranjada (seus valores em R, G, B) ou getColor(10)
que retornará um valor RGB mais Verde / Amarelo.
Sei que preciso aumentar os componentes dos valores R, G, B para uma nova cor, mas não sei especificamente o que aumenta ou diminui à medida que as cores mudam de Verde-Vermelho.
Progresso:
Acabei usando o espaço de cores HSV / HSB porque gostei mais da gradiant (sem marrom escuro no meio).
A função que eu usei foi:
public Color getColor(double power)
{
double H = power * 0.4; // Hue (note 0.4 = Green, see huge chart below)
double S = 0.9; // Saturation
double B = 0.9; // Brightness
return Color.getHSBColor((float)H, (float)S, (float)B);
}
Onde "potência" é um número entre 0,0 e 1,0. 0.0 retornará um vermelho brilhante, 1.0 retornará um verde brilhante.
Gráfico de Matiz Java: