XNA SpriteBatch导致BasicEffect问题

时间:2011-02-04 20:16:18

标签: xna

我正在使用XNA来显示某些数据,我正在尝试使用广告牌进行数据处理,并使用spritebatch进行HUD文本绘制。

对于广告牌,我使用的是以下示例,该示例效果很好: http://create.msdn.com/en-US/education/catalog/sample/3d_audio

在这个例子中,有一只猫和狗精灵,猫在狗的前面或后面经过,这取决于他们的位置和你期望的相机位置。调用Cat.Draw和Dog.Draw的顺序并不重要。这些人来自BasicEffect。

但是,如果我添加一个继承DrawableGameComponent并使用SpriteBatch的类,则其他组件中的BasicEffect会丢失它的深度排序,并且Quad会按照调用的顺序绘制。请注意,此组件通过this.Components.Add(...)添加到Game类。

BasicEffect和SpriteBatch之间是否存在不兼容性?只要调用SpriteBatch.Begin()/ End(),就会出现问题。如果我不打电话给这只猫/狗就可以了。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您需要重置一些SpriteBatch更改的渲染。

尝试在basiceffect调用之前设置这些:

GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;

有关SpriteBatch改变哪些渲染状态的更多信息: http://blogs.msdn.com/b/shawnhar/archive/2010/06/18/spritebatch-and-renderstates-in-xna-game-studio-4-0.aspx