XNA添加剂颗粒在背景上混合
我正在尝试在我正在编写的游戏中实现我的粒子引擎时出现问题。 它在黑色背景上看起来很好,但我忘记了粒子会与背景混合,如果我添加了一个。 有什么办法可以防止我的粒子与背景混合,只让它们与海誓山盟混合?
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, DepthStencilState.Default, RasterizerState.CullNone, null);
Main.TileMap.Draw(spriteBatch);
spriteBatch.End();
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Additive, SamplerState.PointClamp, DepthStencilState.Default, RasterizerState.CullNone, null);
Main.ParticleManager.Draw(spriteBatch);
spriteBatch.End();
这里有一些图片来向你展示我的意思:
http://puu.sh/1O6Zf
http://puu.sh/1O6Yl
编辑:我解决它通过渲染到纹理并将其绘制到屏幕上。 这是固定的代码:
RenderTarget2D renderTarget;
Texture2D particleMap;
public void LoadContent(ContentManager content)
{
renderTarget = new RenderTarget2D(Main.graphicsDevice, pp.BackBufferWidth, pp.BackBufferHeight, true, Main.graphicsDevice.DisplayMode.Format, DepthFormat.Depth24);
}
public void Draw(SpriteBatch spriteBatch)
{
Main.graphicsDevice.SetRenderTarget(renderTarget);
Main.graphicsDevice.Clear(Color.Transparent);
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Additive, SamplerState.PointClamp, DepthStencilState.Default, RasterizerState.CullNone, null);
Main.ParticleManager.Draw(spriteBatch);
spriteBatch.End();
Main.graphicsDevice.SetRenderTarget(null);
particleMap = (Texture2D)renderTarget;
Main.graphicsDevice.Clear(Color.Black);
spriteBatch.Begin();
Main.TileMap.Draw(spriteBatch);
spriteBatch.Draw(particleMap, new Vector2(0, 0), null, Color.White, 0, new Vector2(0, 0), 1f, SpriteEffects.None, 1);
spriteBatch.End();
}
也许这可以帮助你。 为了使纹理半透明:
spriteBatch.Draw(texture, location, Color.White * 0.5f);
所以将值从0.0f
更改为1.0f
将为您提供透明度。
还要确保你发送混合状态
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend)
链接地址: http://www.djcxy.com/p/31835.html
上一篇: XNA Additive particles blending on background
下一篇: Android OpenGL ES texture colors show up correctly on emulator but not on phone