如何使用TiledLib的Demo实现获取地图透明度颜色?

所以我遇到的问题是,当使用Nick Gravelyn的tiledlib管道在XNA中读取和绘制tmx地图时,我在Tiled的编辑器中设置的透明色将在编辑器中工作,但是当我绘制它应该变成透明的颜色仍然吸引。

洋红色溢出到房子上

最接近我find的解决scheme是 –

1)改变我的精灵批次的BlendState为NonPremultiplied(发现在一个潜伏的鸣叫)。

2)获取应该是透明的像素,然后设置它们全部透明。

解决scheme1没有为我工作,解决scheme2似乎hacky,并不是一个很好的方法来解决这个问题,特别是因为它看起来像自定义管道处理器读取透明颜色,并将其设置为透明颜色键到代码中,只是某处出了问题。 至less这就是代码正在做的事情。

TileSetContent.cs if (imageNode.Attributes["trans"] != null) { string color = imageNode.Attributes["trans"].Value; string r = color.Substring(0, 2); string g = color.Substring(2, 2); string b = color.Substring(4, 2); this.ColorKey = new Color((byte)Convert.ToInt32(r, 16), (byte)Convert.ToInt32(g, 16), (byte)Convert.ToInt32(b, 16)); } ... TiledHelpers.cs // build the asset as an external reference OpaqueDataDictionary data = new OpaqueDataDictionary(); data.Add("GenerateMipMaps", false); data.Add("ResizetoPowerOfTwo", false); data.Add("TextureFormat", TextureProcessorOutputFormat.Color); data.Add("ColorKeyEnabled", tileSet.ColorKey.HasValue); data.Add("ColorKeyColor", tileSet.ColorKey.HasValue ? tileSet.ColorKey.Value : Microsoft.Xna.Framework.Color.Magenta); tileSet.Texture = context.BuildAsset<Texture2DContent, Texture2DContent>( new ExternalReference<Texture2DContent>(path), null, data, null, asset); ... 

如果有助于理解我的问题,我可以分享更多的代码。 谢谢。

我会做的是在图像编辑程序(如GIMP)中打开瓷砖,并select所有的粉红色图层,并删除它,只留下一个透明的背景层。 那么使用彩色背景瓷砖就不必担心了。