因为我越来越多地使用XNA,有一件事让我感到困扰。 X和Y只能是整数,当您想要使用向量作为字符位置但想要矩形的交集方法时,这很糟糕。
所以我的问题是在Rectangle结构中究竟发生了什么?
我可能过度思考这一切,但感谢您事先提出任何意见。
答案 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