XNA动画精灵从透明到不透明

时间:2012-09-16 16:18:15

标签: c# animation xna opacity

当从透明图像转换为不透明图像时,我对动画图像有问题。

如果我将图像从不透明图像设置为透明图像,则可以正常工作。 但是,如果我将图像从透明图像设置为不透明图像,则它不起作用。(这是问题)

示例代码:

从不透明到透明的动画:(一切正常,功能正常)

//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():返回绝对值

我做错了什么?

1 个答案:

答案 0 :(得分:1)

编辑: 抱歉,我的灵感一闪而过:)

您的代码不起作用,因为当您的颜色的 Alpha 首次变为Update()时调用0方法时,因为Math.Abs(AlphaTimeSubtract - AlphaTime ) / AlphaTime的值}返回非常接近0.0f,因此无论您将乘以 color 的数字,它都会保持0。事实上,在第一种情况下没有发生这个问题,因为逻辑说从1.0f开始减少它。因此,在这种情况下,您必须每次从255开始减少alpha开始。所以这应该有效:

//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);

我修改了代码,使其比第一个效果(opaque - > transparent)更容易。