这是我的问题。
我的游戏,为了高效的渲染和碰撞被划分为区域。每个区域中都会有许多动态移动的对象。当他们移动时,我需要一种方法来快速确定他们所在的区域。
一个对象永远不能比一个区域更长或更宽。因此,它永远不能同时出现在超过 4 个区域中。
棘手的部分是对象的矩形是使用 2D 中的分离轴定理的定向边界框,因此它们可以旋转。
我想到的主要方法是确定每个点的区域:
static public int colFromPos(float startX,float width, float x)
{
x -= startX;
return (int)Math.floor(x / width);
}
static public int rowFromPos(float startY,float height, float y)
{
y -= startY;
return (int)Math.floor(y / height);
}
这似乎相当快。
我想到了几种方法来做到这一点:
- 我生成 OBB 的边界矩形并找到该矩形的 4 个区域。这里的缺点是必须进行进一步的测试以确定对象是否真的在其中。
- 我确定 OBB 的每个角和每个中点的区域。
有没有更好、更快的方法来解决这个问题?我的任何一个解决方案都是好主意吗?
谢谢