libGdx:Intersector.intersectLines(似乎)返回错误的结果?

时间:2014-03-03 18:48:03

标签: java libgdx collision-detection line-intersection

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(),正如你猜测的那样检查两条线是否有一个或多个公共点,会返回错误的结果。

我在Snake-kind-game游戏中使用它,这个方法应该检查这个“蛇道”的第一个点和第二个点之间的线(它是作为一个由列出的点组成的ArrayList存在的) path)与蛇所包含的其他一条线相交。

参数为: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

2 个答案:

答案 0 :(得分:2)

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

您可能希望使用intersectSegments,而不是使用线段

答案 1 :(得分:0)

查看code,似乎intersectLines方法检查,而不是线段,我认为这就是你&# 39;重新寻找。

具体看一下摘录:

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;

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

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