2015-04-29 67 views
1

我想創建一個hp欄,當hp滿(scale = 1)時,rgb爲100,200,255(如亮綠色),當hp爲0(scale = 0)時,rgb爲100,50,0(暗紅色):如何在2d顏色選擇器中創建一個返回2色之間顏色的函數?

void getHPBarColor(int startR,int startG,int startB,int endR,int endG,int endB,float scale); 

這getHPBarColor(100,200,255,100,50,0,0.5)(半馬力)將返回類似黃色,這黃色的顏色選擇器起始色和結束色之間的顏色。

+0

你可能想編輯你的文章並添加一個編程語言標籤,否則沒有人會發現或閱讀這個問題。 – Lundin

+0

我想你正試圖以奇怪的方式做到這一點。我建議你兩個其他的解決方案:1.用漸變填充hp欄(如何創建,你可以谷歌爲它),並只顯示該矩形的一部分。 2.選擇三種,四種顏色並設置矩形的顏色。 (例如,如果超過50%則爲綠色,如果小於50%則爲黃色,如果小於15%則爲紅色,如果小於5%則爲深紅色)。漸變例如:http://stackoverflow.com/questions/521493/creating-a-linear-gradient-in-2d-array – senfen

+0

保羅M,爲什麼你問框架?他詢問關於顏色算術的數學問題,並且沒有框架依賴關係。他問如何得到答案:顏色A和顏色B得到(顏色A +顏色B)/ 2,但在RGB空間。 – senfen

回答

1

這取決於您的Color類。我假設你有一個簡單的Color類,它需要3個整數(分別是紅綠藍)。這還假定你可以通過你的HP爲百分比(這是有道理的,因爲該功能不一定會知道有多少50HP是因爲最大HP可能取決於怪物等)

struct Color 
{ 
    int red; 
    int green; 
    int blue; 

    Color(int r, int g, int b) : red(r), green(g), blue(b) {} 

    friend std::ostream& operator << (std::ostream& oss, const Color& clr) 
    { 
     oss << clr.red << ", " << clr.green << ", " << clr.blue << endl; 
     return oss; 
    } 
}; 

Color GetHPColor(double dPercent) { return Color(255-(255*dPercent), 0 + 255*dPercent, 0); } 

int main() { 
    cout << GetHPColor(0.0); // 255, 0, 0 at 0% hp 
    cout << GetHPColor(0.5); // 127, 127, 0 at 50% hp 
    cout << GetHPColor(1.0); // 0, 255, 0 at 100% hp 
    return 0; 
} 

您選擇的顏色可以不同。這是給你如何做到這一點的一般要點。

+0

正是我想的,唯一缺少的是,純紅應該永遠不可見(沒有生命,沒有惠普吧),所以你可能需要計算一個偏移量得到一個整潔的漸變 – Zaiborg