我正在制作一个水下游戏,那里有一些由方 block 组成的废墟。 目前,我正在检查与潜艇的多边形和废墟的每个 block 的碰撞,使用一个返回我制作的矩形顶点的函数。
public static float[] rectangleToVertices(float x, float y, float width,
float height) {
float[] result = new float[8];
result[0] = x;
result[1] = y;
result[2] = x + width;
result[3] = y;
result[4] = x + width;
result[5] = y + height;
result[6] = x;
result[7] = y + height;
return result;
}
我认为这不是很有效,有些废墟超过了 10 个方 block ,而且我不想检查单个物体的 10 次碰撞。 有没有办法将多个多边形合并为一个?
这张图可以更好的解释:
红色区域是多边形。
最佳答案
如果我理解你的问题,那么你正在删除共享
边。
最简单的解决方案是从一个 block 开始,将其边缘添加到HashSet
(例如S1)。然后,在迭代 block 列表时,检查其他任何 block 是否共享 S1 的任何边。如果是,则将该 block 的所有边添加到 S1。对于 S1 中已经存在的边,将它们添加到另一个 HashSet(例如 S2)中以跟踪此类边。最后,计算 S1-S2,这将是您想要的边集。使用这些边重建最终的多边形。
顺便说一句,您可能想看看 The Skyline Problem .
关于Java libGDX - 合并多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20919993/