【发布时间】:2011-10-01 17:48:15
【问题描述】:
我正在使用 SpriteBatch 在屏幕上绘制 Texture2D,并且想知道如何操纵图像的不透明度?有谁知道实现这一点的最佳方法?
【问题讨论】:
标签: xna transparency opacity
我正在使用 SpriteBatch 在屏幕上绘制 Texture2D,并且想知道如何操纵图像的不透明度?有谁知道实现这一点的最佳方法?
【问题讨论】:
标签: xna transparency opacity
假设您使用的是带有预乘 alpha 的 XNA 4.0。在你的 spritebatch.draw 中,将颜色乘以浮点数,0.5f 表示 50% 的透明度,然后像往常一样绘制。如果您不使用预乘 alpha,我建议您出于性能原因使用它,并且在您习惯后它会更直观。
例子:
_spriteBatch.Draw(texture, location, Color.White * 0.5f);
编辑: 还要确保将混合状态设置为 BlendState.AlphaBlend,或其他支持 alpha 且不是 NonPremultiplied 的混合状态。
例子:
_spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
【讨论】:
Color 上使用乘法运算符调制所有四个通道 (RGBA),并且仅在使用预乘混合模式时提供预期的透明度变化(例如:AlphaBlend)。要使其他混合状态按预期工作(例如:Additive 和 NonPremultiplied),您应该直接设置颜色的 alpha 值(不考虑 RGB)。
只需使用颜色作为new Color(RGBA); where:
例如:
new Color(100, 100, 100, 100);
【讨论】:
Color 参数不是 enum 哈哈!我不知道你可以像这样创建自己的颜色。