2

私は現在、SFML を使用して C++ でロゴ シーケンスを作成しており、希望の時間を入力してからその時間だけフェードしたいと考えています。たとえば、入力が 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);

どんな助けでも大歓迎です!簡単に説明する方法が思いつかなくてすみません。

4

1 に答える 1

2

ドローごとに 1 歩ずつ、start colorからend colorオーバーにフェードします。total fade timeelapsed time

その結果、各描画ステップで、色を に設定する必要がありますstart color + ((end color - start color) * (elapsed time / total time))。これにより、達成したい変化の量が得られ、この時点までに発生するはずだった変化の割合を計算し、その変化量を最初の量に追加します.

たとえば、100 から 255 ミリ秒に移動したい場合、3000 ミリ秒のうち 1000 ミリ秒だった場合、100 から 255 までの 1/3、つまり 151.6667 (151 は切り捨てられます) になると予想されます。2/3 では、203.333 になります。など。

>= your になったらtotal time、 に設定start colorするだけend colorです。

于 2013-02-23T05:14:57.470 に答える