我正在使用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(),就会出现问题。如果我不打电话给这只猫/狗就可以了。
有什么想法吗?
答案 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