1

我想要一些 2D 精灵来遮挡一些 3D DrawableGameComponents。举个简单的例子,暂停菜单(实现为 2D 精灵)应绘制在暂停的太空船(实现为 3D 游戏组件)的顶部。

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

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

  1. 游戏 Draw() 方法
  2. DrawableGameComponent Draw() 方法

我的 spriteBatch 绘制方法调用是我的 Game 类的绘制方法。因此,宇宙飞船被绘制在暂停菜单的顶部(使其不可读)。

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

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

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

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

任何援助将不胜感激。

4

1 回答 1

3

自从我使用 XNA 以来已经有一段时间了,但我相信你的类方法中的base.Draw()调用会遍历你的,所以你可以尝试在你的方法中的绘图逻辑之前或之后放置这个调用,具体取决于你想要的顺序呼吁发生。 Draw()GameDrawableGameComponentsDraw

于 2010-07-11T07:31:59.837 回答