我想要一些2D精灵来遮挡一些3D DrawableGameComponents。对于简化示例,应在暂停的太空飞船(实现为3D游戏组件)之上绘制暂停菜单(实现为2D精灵)。
XNA框架自动从Microsoft.Xna.Framework.Game和Microsoft.Xna.Framework.DrawableGameComponent调用类的Draw方法。
根据我的经验,我发现抽奖顺序是:
我的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对象放置的常规方法是什么?
任何帮助都将不胜感激。
答案 0 :(得分:3)
我使用XNA已经有一段时间了,但我相信base.Draw()
类的Draw()
方法中的Game
调用会遍历您的DrawableGameComponents
,所以您可以尝试在Draw
方法中的绘图逻辑之前或之后发出此调用,具体取决于您希望调用发生的顺序。