アニメーション中にサイズが 0.6f から 2.0f に変化するスプライトがあります。
同時に、スケールが大きくなるにつれてアルファ値を 1.0f から 0 に変更したいと考えています。したがって、スプライトは 0.6f で完全に不透明になり、サイズが 2.0f で完全に透明になるまで徐々に消えます。
これらの値を相互に関連付けるにはどうすればよいですか?
アニメーション中にサイズが 0.6f から 2.0f に変化するスプライトがあります。
同時に、スケールが大きくなるにつれてアルファ値を 1.0f から 0 に変更したいと考えています。したがって、スプライトは 0.6f で完全に不透明になり、サイズが 2.0f で完全に透明になるまで徐々に消えます。
これらの値を相互に関連付けるにはどうすればよいですか?
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;
各値を個別にアニメーション化すると、より簡単で拡張性が高くなります。この場合、スケールとアルファですが、同じロジックを何にでも適用できます。
アニメーションは時間の関数であるため、ここで欠落している変数は、アニメーションを持続させたい時間です。
各アニメーションには 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;
これは、概念を示すために頭のてっぺんから離れた最も単純な線形アニメーションの例であることに注意してください。アニメーションの終了を検出し、アニメーションが終了したときに何をするかについては、おそらく他のコードが必要になるでしょう。