如何使Texture2D 50%透明?XNA

Tom*_*Tom 21 xna transparency opacity

我正在使用SpriteBatch在屏幕上绘制Texture2D,并想知道如何操纵图像的不透明度?有谁知道完成这个的最好方法?

Cla*_*der 37

假设您正在使用带有预乘alpha的XNA 4.0.在你的spritebatch.draw中,将颜色乘以浮点数,0.5f,50%透明度,并按正常情况绘制.如果您不使用预乘alpha,我建议您出于性能原因而做,并且在您习惯它后会更直观.

例:

_spriteBatch.Draw(texture, location, Color.White * 0.5f);
Run Code Online (Sandbox Code Playgroud)

编辑:还要确保将混合状态设置为BlendState.AlphaBlend,或者另一个支持alpha且不是NonPremultiplied的混合状态.

例:

_spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
Run Code Online (Sandbox Code Playgroud)

  • 使用"颜色"上的乘法运算符调制所有四个通道(RGBA),并且仅在使用预乘混合模式时提供预期的透明度变化(例如:`AlphaBlend`).对于其他混合状态按预期工作(例如:`Additive`和`NonPremultiplied`),您应该直接设置颜色的alpha值(仅保留RGB). (8认同)

小智 6

只需使用颜色new Color(RGBA);:

  • R是红色的
  • G是绿色的
  • B是蓝色的
  • A是阿尔法

例如:

new Color(100, 100, 100, 100);
Run Code Online (Sandbox Code Playgroud)

  • 这可能不是故意的,但你只是向我展示了`Color`参数不是en enum lol!我不知道你可以创造自己的颜色. (2认同)