可以在SpriteBatch绘制调用之前绘制XNA DrawableGameComponents,以便在DrawableGameComponents之上绘制精灵吗?

时间:2010-07-11 06:30:41

标签: c# xna drawablegamecomponent

我想要一些2D精灵来遮挡一些3D DrawableGameComponents。对于简化示例,应在暂停的太空飞船(实现为3D游戏组件)之上绘制暂停菜单(实现为2D精灵)。

XNA框架自动从Microsoft.Xna.Framework.Game和Microsoft.Xna.Framework.DrawableGameComponent调用类的Draw方法。

根据我的经验,我发现抽奖顺序是:

  1. Game Draw()方法
  2. DrawableGameComponent Draw()方法
  3. 我的spriteBatch绘制方法调用是我的Game类的draw方法。因此,太空飞船将在暂停菜单的顶部绘制(使其无法读取)。

    在我看来,解决我的问题最简单的方法是颠倒调用draw方法的顺序。这可能吗?

    我尝试将DrawableGameComponents的DrawOrder设置为不同的值(1000,1,0,-1,-1000),但它对Game和DrawableGameComponent实例之间的XNA框架Draw()方法调用顺序没有影响。

    我已经研究了SpriteBatch Draw方法调用的layerDepth,但它们似乎与Game和DrawableGameComponent类之间的XNA Framework绘制顺序无关。图层深度似乎只会影响SpriteBatch中的精灵。

    我是使用XNA的新手,但我怀疑我对框架的要求太高了。如果是这种情况,那么在3D对象上实现2D对象放置的常规方法是什么?

    任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

我使用XNA已经有一段时间了,但我相信base.Draw()类的Draw()方法中的Game调用会遍历您的DrawableGameComponents,所以您可以尝试在Draw方法中的绘图逻辑之前或之后发出此调用,具体取决于您希望调用发生的顺序。