XNA矩形如何工作?

时间:2012-08-21 02:43:06

标签: c# xna xna-4.0

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

所以我的问题是在Rectangle结构中究竟发生了什么?

我可能过度思考这一切,但感谢您事先提出任何意见。

2 个答案:

答案 0 :(得分:2)

XNA缺少 2D轴对齐边界框结构(使用浮点,与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的方式响应。但是,正如你所看到的,代码并不多 - 所以它应该很容易修改。

答案 1 :(得分:0)

通常在单独的图层上处理碰撞和物理。由它们定义的“矩形”将与此不同。

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

如果你想重新使用这个矩形,那么将你的角色数据存储为两个向量(x,y和w,h)并提供像Lee Taylor建议的那样转换为Rectangle