MonoGame – BlendState – 2D SpriteBatch

我需要SpriteBatch来呈现图片我如何在WPF或一个普通的UIKit应用程序:

  • 就像你所期望的那样,部分透明的PNG呈现在另一个之上
  • 我有一个alpha我可以修改,最好是像使用Color.White和修改A值。

最近的一直使用BlendState.NonPremultiplied ,但我得到奇怪的行部分透明PNG重叠在一起。

我在Windows上遇到了类似的问题(请参阅此处) ,但通过更改XNA内容项目中的Premultiplied设置来解决此问题。 我怎么能做类似的MonoGame? (我期待OpenGL在这里有所不同)

我们通过使用两种不同的设置来解决它。

在Windows和XNA上:

  • 使用BlendState.NonPremultiplied
  • 在内容项目中将所有PNG的默认设置更改为Premultiply = False
  • 要修改精灵的Alpha值,请使用Color.White并设置A

在MonoGame和iOS上:

  • 使用BlendState.AlphaBlend
  • 保留PNG原样
  • 要修改精灵的Alpha值,请使用Color.White * (float)Alpha / (float)byte.MaxValue

我的PNG 不是预先倍增的,而是完全按照您期望从Photoshop中出来的方式使用。