1

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

    protected override void Draw(GameTime gameTime)
    {


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

        stateManager.Draw(gameTime, batch);

        batch.End();

        base.Draw(gameTime);
    }

这工作得很好,但是当然,它看起来很糟糕,所以把它分成两个draw call,一个有bloom,一个没有,我试过这个:

    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);

    }

然而,现在一切都完全变黑了。谁能指出我为什么会发生这种情况以及我“真的”应该如何解决这个问题?

4

1 回答 1

0

你的国家经理打电话GraphicsDevice.Clear()吗?如果是这样,它每次都会清除屏幕,从而取消您之前的所有渲染。

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

你的第二批应该是添加剂吗?我本来希望它是 alpha 混合或不透明的。

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

于 2015-01-06T12:08:28.523 回答