2010-07-11 66 views
1

我想要一些2D精灵来遮挡一些3D DrawableGameComponents。对于一个简单的例子,暂停菜单(实现为2D精灵)应该绘制在暂停的太空船上(作为3D游戏组件实现)。可以在SpriteBatch绘制调用之前绘制XNA DrawableGameComponents,以便绘制在DrawableGameComponents之上的精灵?

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

以我的经验,我发现绘制顺序是:

  1. 游戏抽奖()方法
  2. DrawableGameComponent抽奖()方法

我spriteBatch绘制方法的调用都是平局我的Game类的方法。因此,太空飞船将被拖到暂停菜单的顶部(使其无法读取)。

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

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

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

我是新来的使用XNA,但我怀疑我是问太多的框架。如果是这种情况,将2D对象放置在3D对象顶部的正常方法是什么?

任何援助将不胜感激。

回答

3

出现了,因为我用XNA一段时间,但我相信base.Draw()呼叫您Game类的Draw()方法将通过您的DrawableGameComponents迭代,所以你可以尝试之前或在绘图逻辑后,拨打这通电话你Draw方法取决于您希望发生呼叫的顺序。

+0

没错!我不知道那个base.Draw()正在调用DrawableGameComponent的Draw()方法。移动绘图逻辑上方的base.Draw()方法调用修改绘制顺序。谢谢。 – 2010-07-11 07:41:49