gpt4 book ai didi

c# - Sprite Batch 不会改变 Alpha

转载 作者:行者123 更新时间:2023-11-30 12:35:28 25 4
gpt4 key购买 nike

我遇到了一个问题,即 SpriteBatch 不使用指定“Trail”的修改后的 Alpha 进行绘制。我想要做的是一种“淡入淡出效果”,其中“项目”的 alpha 降低,使其变得更加透明,直到它最终被摧毁。但是它不会改变它的 alpha 吗?alpha 确实降低了,但是颜色的 alpha 值没有被修改,它保持相同的颜色然后消失

事情是这样的: http://dl.dropbox.com/u/14970061/Untitled.jpg

这就是我想要做的http://dl.dropbox.com/u/14970061/Untitled2.jpg

这是我目前正在使用的相关代码的截图。

spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
for (int i = 0; i < Trails.Count; i++)
{
Trail Item = Trails[i];
if (Item.alpha < 1)
{
Trails.RemoveAt(i);
i--;
continue;
}

Item.alpha -= 255 * (float)gameTime.ElapsedGameTime.TotalSeconds;
Color color = new Color(255, 0, 0, Item.alpha);
spriteBatch.Draw(simpleBullet, Item.position, color);
}
spriteBatch.End();

最佳答案

如果不需要,请不要使用 NonPremultiplied! 将其保留为 AlphaBlend。继续阅读 Premultiplied Alpha以及它是如何added in XNA 4.0 .

您的问题的正确解决方案是在您的颜色上使用乘法运算符:

Color color = Color.Red * Item.alpha/255f;

或者使用等效的 Lerp 函数将其插值到透明度:

Color color = Color.Lerp(Color.Red, Color.Transparent, Item.alpha/255f);

(此外,如果您确实将混合状态更改为非预乘,为了正确起见,您必须将内容导入更改为不预乘纹理,并确保您的内容在其透明边缘周围具有可混合数据。)

关于c# - Sprite Batch 不会改变 Alpha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5474002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com