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
答案 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;
出于您的目的,您需要使用自定义方法或添加一些后期处理。例如,如果您将第五个参数添加到方法中,然后检查该两个点之间是否存在交叉点,那就足够了。
我不确定您的积分是如何存储的,但也可能足以检查任何端点是否相等。