Tôi đang viết một trò chơi Java và tôi muốn triển khai một máy đo sức mạnh cho việc bạn sẽ bắn một thứ gì đó khó đến mức nào.
Tôi cần phải viết một hàm lấy int từ 0 - 100, và dựa trên số đó là bao nhiêu, nó sẽ trả về màu giữa Xanh lục (0 trên thang đo công suất) và Đỏ (100 trên thang đo công suất).
Tương tự như cách điều khiển âm lượng hoạt động:
Tôi cần thực hiện thao tác nào trên các thành phần Đỏ, Xanh lục và Xanh lam của một màu để tạo ra các màu giữa Xanh lục và Đỏ?
Vì vậy, tôi có thể chạy nói getColor(80)
và nó sẽ trả về màu cam (giá trị của nó trong R, G, B) hoặc getColor(10)
sẽ trả về giá trị RGB xanh / vàng nhiều hơn.
Tôi biết tôi cần tăng các thành phần của các giá trị R, G, B cho một màu mới, nhưng tôi không biết cụ thể những gì tăng hoặc giảm khi màu chuyển từ Xanh-Đỏ.
Phát triển:
Tôi đã kết thúc bằng cách sử dụng không gian màu HSV / HSB vì tôi thích màu tăng dần tốt hơn (không có màu nâu sẫm ở giữa).
Hàm tôi đã sử dụng là:
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);
}
Trong đó "sức mạnh" là một số trong khoảng từ 0,0 đến 1,0. 0,0 sẽ trả về màu đỏ tươi, 1,0 sẽ trả lại màu xanh sáng.
Biểu đồ Java Huế: