0

所以当我越来越多地使用 XNA 时,有一件事真的让我很困扰。X 和 Y 只能是整数,当您想使用向量作为字符位置时,这很糟糕,但想要矩形的交集方法。

所以我的问题是 Rectangle 结构中到底发生了什么?

我可能想太多了,但提前感谢您的任何意见。

4

2 回答 2

2

XNA 缺少2D Axis-Aligned Bounding Box结构(使用浮点,不像Rectangle)有点烦人。它有一个 3D 的,BoundingBox如果您只是忽略 Z 轴,您可以重复使用它。

我个人编写自己的AABB结构并使用它。或者,更确切地说,我写过一次,它只是在项目之间复制。这不是一个难写的结构。

我会在这里为您发布它,只是您已经特别询问了它是如何Rectangle工作的(我自己的结构的运作方式完全不同)。所以这是我刚刚放在一起的一个,应该类似于Rectangle

public struct AABB
{
    public float X, Y, Width, Height;

    public static AABB Intersect(AABB a, AABB b)
    {
        AABB result;
        result.X = Math.Max(a.X, b.X);
        result.Y = Math.Max(a.Y, b.Y);
        result.Width = Math.Min(a.X + a.Width, b.X + b.Width) - result.X;
        result.Height = Math.Min(a.Y + a.Height, b.Y + b.Height) - result.Y;

        if(result.Width < 0 || result.Height < 0)
            return default(AABB);
        else
            return result;
    }
}

作为我刚刚拼凑起来的东西,它并没有经过很好的测试。而且我不确定它会以与Rectangle给定负宽度/高度时相同的方式响应。但是,正如您所看到的,它的代码并不多——所以它应该很容易修改。

于 2012-08-21T07:49:35.683 回答
0

通常碰撞和物理在单独的层上处理。他们定义的“矩形”将与这个不同。

XNA 矩形可能可用于 UI 内容和视口。

如果您想重新使用此矩形,则将您的字符数据存储为两个向量(x,y 和 w,h),并像 Lee Taylor 建议的那样提供到 Rectangle 的转换

于 2012-08-21T03:39:33.540 回答