2013-01-15 4 views
1

현재 코딩중인 게임에서 구현하려고하는 입자 엔진에 문제가 있습니다. 검정색 배경에는 괜찮아 보이지만 하나 추가하면 입자가 배경과 섞여 있다는 사실을 잊어 버렸습니다. 입자가 배경과 블렌딩되지 않고 서로 섞일 수있는 방법이 있습니까?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(); 
    } 

답변

0

아마도 도움이 될 수 있습니다. 텍스처 반 투명하게 만들려면 :

spriteBatch.Draw(texture, location, Color.White * 0.5f); 

그렇게 1.0f0.0f에서 값을 변경하면 힘을 투명성을 제공 할 것입니다. 또한

하게 전송 혼합 상태로 당신이 확인

spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend)