2

从透明图像转换为不透明图像时,动画图像出现问题。

如果我将图像从不透明图像设置为透明图像,则效果很好。但是,如果我将图像从透明图像动画到不透明图像,它就不起作用了。(这是问题)

示例代码:

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

//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()第一次调用该方法时,您的颜色的Alpha0变为 Alpha ,因为Math.Abs(AlphaTimeSubtract - AlphaTime ) / AlphaTime返回的值非常接近,0.0f因此对于您将乘以颜色的任何数字,它仍然存在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);

与第一个效果(不透明 -> 透明)相比,我修改了代码以使其更容易。

于 2012-09-16T18:17:31.923 回答