2014-03-03 130 views
1
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(),它可以猜測,如果兩行有一個或多個公共點,返回錯誤的結果。libGdx:Intersector.intersectLines(似乎)返回錯誤的結果?

我在Snake-kind-of遊戲中使用它,並且此方法應該檢查此「蛇路徑」的第一個點和第二個點之間的連線(它存在爲ArrayList,包含點該路徑)與蛇所組成的其中一條線相交。

參數爲:Vector2第一行的第一個點; Vector2第一行第二點; Vector2第二行的第一個點; Vector2第二行第二點; Vector2將被設置爲相交點。

對於那些不熟悉GDX的人來說,它是一個用於在java中進行跨平臺開發的框架,大多數方法都是openGL ES方法的實現。繼承人的部門間類的API參考:http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/math/Intersector.html

回答

0

望着code,它似乎是在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; 

出於您的目的,您需要使用自定義方法或添加一些後期處理。例如,如果您在方法的第五個參數中添加了,然後檢查了該交點是否位於兩個點之間,那就足夠了。

我不確定你的積分是如何存儲的,但它可能也足以檢查是否有任何端點是平等的。

1

intersectLines實際上是RayRay碰撞檢查,其中射線由線上的兩個點定義。這個文件不是很清楚。

您可能需要使用intersectSegments代替,它適用於線段

相關問題