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() のように思えます。これは、2 つの線に 1 つ以上の共通点があるかどうかをチェックして、間違った結果を返します。

私はスネークのようなゲームでこれを使用しています。このメソッドは、この「スネークパス」(パスのポイントで構成される ArrayList として存在する) の最初のポイントと 2 番目のポイントの間の線が交差するかどうかを確認する必要があります。ヘビを構成する他の線の1つと。

パラメータは次のとおりです。 Vector2 first 最初の行のポイント。Vector2 最初の線の 2 番目のポイント。Vector2 2 番目の線の最初のポイント。Vector2 2 番目のラインの 2 番目のポイント。交点に設定される Vector2。

GDX に慣れていない方のために説明すると、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 Collision チェックであり、光線は線上の 2 点によって定義されます。ドキュメントはこれであまり明確ではありません。

代わりに、線分で機能するintersectSegmentsを使用することをお勧めします

于 2015-01-18T16:02:05.627 に答える
0

コードを見ると、メソッドはintersectLinesをチェックしているように見えますが、探しているのは線分ではありません。

具体的には、この抜粋を見てください。

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

これは、2 つの線の傾きが等しい (線が平行である) 場合にのみ false を返します。次と同等であることに注意してください。

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

目的のために、カスタム メソッドを使用するか、何らかの後処理を追加する必要があります。たとえば、メソッドに 5 番目のパラメーターを追加し、その交点が 2 つの点の間にあるかどうかを確認した場合、それで十分です。

ポイントがどのように保存されているか正確にはわかりませんが、エンドポイントのいずれかが等しいかどうかを確認するだけでも十分かもしれません。

于 2014-03-03T19:12:07.853 に答える