1

現在コーディング中のゲームに実装しようとしているパーティクル エンジンで問題が発生しました。黒の背景では問題ないように見えますが、パーティクルを追加すると背景とブレンドされることを忘れていました。パーティクルが背景とブレンドするのを防ぎ、互いにブレンドするだけにする方法はありますか?

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();
    }
4

1 に答える 1

0

多分これはあなたを助けることができます。テクスチャを半透明にするには:

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

値を から0.0fに変更する1.0fと、透明度が強くなります。

また、必ずブレンド状態を送信してください

spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend)
于 2013-10-25T12:24:40.787 に答える