2013-02-23 34 views
2

我目前正在C++中用SFML創建一個標誌序列,並且想輸入一個所需的時間然後淡出這段時間,比如說,如果輸入是3,則淡出該顏色,直到3秒鐘結束。顏色整數的最大值,作爲一個顏色在255處爲白色。這是我目前的代碼:試圖找出一個方程來褪色一段時間的顏色

sf::Time fadeCalc = clock.getElapsedTime(); 
int f = fadeCalc.asMilliseconds(); 
int l = logoLength.asSeconds(); 
int iColor = "Equation needed using variables" 
sf::Color fadeColor(iColor,iColor,iColor); 
Fade.setFillColor(fadeColor); 

任何幫助將不勝感激!對不起,我找不出解決問題的方法。

回答

2

您將從start color變爲end color而不是total fade time,每次抽取elapsed time

因此,在每個繪製步驟中,您需要將顏色設置爲start color + ((end color - start color) * (elapsed time/total time))。這將使您獲得您想要完成的更改量,並計算出此時應該發生的更改百分比,然後將該更改量添加到您的初始數量。

例如,如果您希望從100到255,並且在3000毫秒內已經達到1000,那麼您應該預期爲從100到255或151.6667(151被截斷)的三分之一。在2/3時,這將是203.333。等等。

一旦您> =您的total time,只需將start color設置爲end color即可。

+0

非常感謝!這是一個完美的答案,我無法把頭圍住它。 – John 2013-02-23 20:28:18