-1

アニメーション中にサイズが 0.6f から 2.0f に変化するスプライトがあります。

同時に、スケールが大きくなるにつれてアルファ値を 1.0f から 0 に変更したいと考えています。したがって、スプライトは 0.6f で完全に不透明になり、サイズが 2.0f で完全に透明になるまで徐々に消えます。

これらの値を相互に関連付けるにはどうすればよいですか?

4

2 に答える 2

0
spriteBatch.Draw(texture, Vector2.Zero, Color.White*alpha,null,0f,origin,scale,1f);

どこ

  alpha = MathHelper.Clamp(0, 1 , 1 - (scale - startScale)/deltaScale);

あなたの場合

 startScale = 0.6f,deltaScale = 2.0f-0.6f = 1.4f;
于 2013-09-20T07:54:51.630 に答える
0

各値を個別にアニメーション化すると、より簡単で拡張性が高くなります。この場合、スケールとアルファですが、同じロジックを何にでも適用できます。

アニメーションは時間の関数であるため、ここで欠落している変数は、アニメーションを持続させたい時間です。

各アニメーションには startValue と endValue があります。そこから、次のように「1 秒あたりの変化」を導き出すことができます。

var changePerSecond = (endValue - startValue) / totalSeconds;

次に、各フレームで、フレーム時間 (deltaTime) を掛けて目的のプロパティを単純にインクリメントします。

scale += changePerSecond * deltaTime;

わかりました。基本的な概念を理解したら、アニメーションでスケールとアルファがどのように機能するかを確認できます (例として 1 秒のアニメーションを使用)。

var scalePerSecond = (2.0f - 0.6f) / 1.0f;
var alphaPerSecond = (0.0f - 1.0f) / 1.0f;

次に、更新メソッドで..

scale += scalePerSecond * deltaTime;
alpha += alphaPerSecond * deltaTime;

これは、概念を示すために頭のてっぺんから離れた最も単純な線形アニメーションの例であることに注意してください。アニメーションの終了を検出し、アニメーションが終了したときに何をするかについては、おそらく他のコードが必要になるでしょう。

于 2013-09-20T13:24:35.233 に答える