XNA MonoGame,麻烦渲染绽放

时间:2015-01-06 11:21:05

标签: c# monogame bloom

我正在尝试在游戏中对某些激光器实现绽放效果,但我遇到了一些问题。 首先,我将绽放应用于所有内容,如下所示:

    protected override void Draw(GameTime gameTime)
    {


        batch.Begin(SpriteSortMode.Texture, BlendState.Additive);
        bloom.BeginDraw();

        stateManager.Draw(gameTime, batch);

        batch.End();

        base.Draw(gameTime);
    }

这很好,但当然,它看起来很可怕,所以把它分成两个绘制调用,一个有绽放,一个没有,我试过这个:

    protected override void Draw(GameTime gameTime)
    {
        bloom.BeginDraw();
        GraphicsDevice.Clear(Color.Black);

        batch.Begin(SpriteSortMode.Texture, BlendState.Additive);

        stateManager.DrawBloomed(gameTime, batch);

        batch.End();

        base.Draw(gameTime);

        batch.Begin(SpriteSortMode.Deferred, BlendState.Additive);

        stateManager.Draw(gameTime, batch);

        batch.End();

        base.Draw(gameTime);

    }

然而,现在一切都是黑色的。 任何人都可以指出我正确的方向,为什么会发生这种情况以及我该如何处理这个问题呢?

1 个答案:

答案 0 :(得分:0)

您的州长是否致电GraphicsDevice.Clear()?如果是这样,它每次都清除屏幕,因此取消了之前的所有渲染。

每次通话只应拨打base.Draw(),因此请删除中间的一个。如果base.Draw()正在清除屏幕,那也会导致问题,所以要么删除调用,要么将其放在方法的开头。

你的第二批产品应该是添加剂吗?我原以为它是alpha混合或不透明。

如果以上都不能解决您的问题,请将代码发布到stateManager.Draw(),stateManager.DrawBloomed()的代码,基类的代码(如果它是非XNA类)和屏幕截图预期的结果。