2

透明な画像から不透明な画像に変換するときに、アニメーション画像に問題があります。

画像を不透明な画像から透明な画像にアニメーション化すると、正常に機能します。しかし、画像を透明な画像から不透明な画像にアニメーション化すると、機能しなくなります(それが問題です)

サンプルコード:

不透明から透明にアニメーション化:(すべてOK、機能的)

//Define variables (in construct):

float AlphaTime = 3500f; // total animate time (at milliseconds)
float AlphaTimeSubtract = 3500f; // at milliseconds
Color color = Color.White;

//Update method:

AlphaTimeSubtract -= (float)(gameTime.ElapsedGameTime.TotalMilliseconds); // abate number of elapsed time (for milliseconds) 
color *= MathHelper.Clamp(AlphaTimeSubtract / AlphaTime, 0, 1);

//Draw merhod:
spriteBatch.Draw(texture, position, color);

透明から不透明にアニメーション化:(つまり、問題があり、機能しません)!!!

結果は目に見えないスプライトです!(間違っています)

正しい結果は次のようになります。スプライトを透明から不透明にアニメートします。

//Define variables (in construct):

float AlphaTime = 3500f; // total animate time (at milliseconds)
float AlphaTimeSubtract = 3500f; // at milliseconds
Color color = Color.White;

//Update method:

AlphaTimeSubtract -= (float)(gameTime.ElapsedGameTime.TotalMilliseconds); // abate number of elapsed time (for milliseconds) 
color *= MathHelper.Clamp(Math.Abs(AlphaTimeSubtract - AlphaTime ) / AlphaTime , 0, 1);

//Draw merhod:
spriteBatch.Draw(texture, position, color);

MathHelper.Clamp()

Math.Abs():絶対値を返す

私は何が間違っているのですか?

4

1 に答える 1

1

編集: 申し訳ありませんが、私は遅くインスピレーションのフラッシュを持っていました:)

Update()メソッドが最初に呼び出されたときに色のアルファがになるため、コードは機能しません。返さ0れる値Math.Abs(AlphaTimeSubtract - AlphaTime ) / AlphaTimeは非常に近いため、0.0fを乗算する数値が何であれ、それは残ります。実際、この問題は最初のケースでは発生しませんでした。これは、ロジックがから始めて問題を減らすように指示しているためです。したがって、この場合、毎回255から開始してアルファを減らす必要があります。したがって、これは機能するはずです。01.0f

//Initialize it to 0
float AlphaTimeSubtract = 0.0f;

//Then in the update method increase it (The inverse logic you used in the opaque --> transparent effect)
AlphaTimeSubtract += (float)(gameTime.ElapsedGameTime.TotalMilliseconds);
color = Color.White * MathHelper.Clamp(AlphaTimeSubtract / AlphaTime , 0, 1);

最初の効果(不透明->透明)と比較して簡単になるようにコードを変更しました。

于 2012-09-16T18:17:31.923 に答える