2
if (points.size() >= 3) {
   for (int i = 1; i <= points.size() - 1; i++) {
      if (Intersector.intersectLines(points.get(0), points.get(1), points.get(i), points.get(i + 1), null)) return true;
   }
}
return false;

我找不到我的错误,所以看起来像 intersecLines() 方法,你可以猜到它检查两条线是否有一个或多个共同点,返回错误的结果。

我在蛇类游戏中使用它,这个方法应该检查这个“蛇路径”的第一个和第二个点之间的线是否相交与蛇组成的其他线之一。

参数为: Vector2 first Point of first line;Vector2 第一行的第二个点;Vector2 第二行的第一个点;Vector2 第二行的第二个点;将设置为相交点的 Vector2。

对于不熟悉GDX的朋友来说,它是一个java跨平台开发的框架,大部分方法都是openGL ES方法的实现。下面是 Intersector 类的 api 参考:http: //libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html

4

2 回答 2

3

intersectLines 实际上是一个 RayRay 碰撞检查,其中光线由一条线上的两个点定义。文档对此不是很清楚。

您可能想改用intersectSegments,它适用于线段

于 2015-01-18T16:02:05.627 回答
0

查看代码,该intersectLines方法似乎检查,而不是我认为您正在寻找的线段。

具体看这段摘录:

float d = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
if (d == 0) return false;

当且仅当两条线的斜率相等(线平行)时才返回 false。请注意,它相当于:

if ((y4 - y3) / (x4 - x3) == (y2 - y1) / (x2 - x1)) return false;

出于您的目的,您需要使用自定义方法或添加一些后期处理。例如,如果您在方法中添加了第五个参数,然后检查该交点是否位于您的两个点之间,这就足够了。

我不确定您的积分是如何存储的,但检查任何端点是否相等也可能就足够了。

于 2014-03-03T19:12:07.853 回答