【问题标题】:Can XNA DrawableGameComponents be drawn before SpriteBatch draw calls so that sprites are drawn on top of DrawableGameComponents?是否可以在 SpriteBatch 绘制调用之前绘制 XNA DrawableGameComponents,以便在 DrawableGameComponents 之上绘制精灵?
【发布时间】:2010-07-11 06:30:41
【问题描述】:

我想要一些 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 对象之上的正常方法是什么?

任何帮助将不胜感激。

【问题讨论】:

    标签: c# xna drawablegamecomponent


    【解决方案1】:

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

    【讨论】:

    • 完全正确!我不知道 base.Draw() 正在调用 DrawableGameComponent Draw() 方法。将 base.Draw() 方法调用移到绘图逻辑上方固定了绘图顺序。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多