当从透明图像转换为不透明图像时,我对动画图像有问题。
如果我将图像从不透明图像设置为透明图像,则可以正常工作。 但是,如果我将图像从透明图像设置为不透明图像,则它不起作用。(这是问题)
示例代码:
从不透明到透明的动画:(一切正常,功能正常)
//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);
Math.Abs()
:返回绝对值
我做错了什么?
答案 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)更容易。