0

我正在尝试编写 XNA 游戏。但我是新人。我想确定场景中最顶层的对象。在矩形形式中,当两个矩形在屏幕上相交时,我想点击最上面的一个。但我不知道如何从场景中检测到最上面的物体。
有谁能够帮我?有没有办法呢?

4

1 回答 1

1

这取决于您使用什么方法来绘制它们。

  • 如果您使用模式,则按调用SpriteSortMode.Deferred顺序绘制它们。SpriteBatch.Draw通过这种方式,您知道哪个对象是最顶层的。为了实现这一点,您需要检查列表、数组或其他任何对象中的每个对象,第一个(或最后一个,这取决于您如何管理结构)元素的Rectangle包含您的点击的对撞机将是最顶部的目的。找到它后,您需要break循环“扫描”您的列表/数组,以便仅检测该点击。

  • 如果您正在使用SpriteSortMode.BackToFront或者FrontToBack很难知道。

参考这里

更新

当您使用Deferred模式绘制对象并且它们“碰撞”时,您肯定知道最后绘制的对象是最顶部的。
如果您使用的是列表,则必须执行以下操作:

for (int i = spriteList.Count - 1; i >= 0; i--)
{
    if (spriteList[i].collisionRect.Contains(touch))
    {
        topMostSprite = spriteList[i];
        break;
    }
}
于 2013-11-10T01:11:33.467 回答