我正在尝试在游戏中对某些激光器实现绽放效果,但我遇到了一些问题。 首先,我将绽放应用于所有内容,如下所示:
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);
}
然而,现在一切都是黑色的。 任何人都可以指出我正确的方向,为什么会发生这种情况以及我该如何处理这个问题呢?
答案 0 :(得分:0)
您的州长是否致电GraphicsDevice.Clear()
?如果是这样,它每次都清除屏幕,因此取消了之前的所有渲染。
每次通话只应拨打base.Draw()
,因此请删除中间的一个。如果base.Draw()正在清除屏幕,那也会导致问题,所以要么删除调用,要么将其放在方法的开头。
你的第二批产品应该是添加剂吗?我原以为它是alpha混合或不透明。
如果以上都不能解决您的问题,请将代码发布到stateManager.Draw(),stateManager.DrawBloomed()的代码,基类的代码(如果它是非XNA类)和屏幕截图预期的结果。