2016-04-23 12 views
1

ポリゴンシェイプが他のポリゴンシェイプと同じかどうかを確認するにはどうすればよいですか? .equals()は機能しません。このコードは "equals"を出力しません。LibGDX PolygonShapesを比較するにはどうすればよいですか?

PolygonShape test1 = new PolygonShape(); 
PolygonShape test2 = new PolygonShape(); 

test1.setAsBox(10, 20, new Vector2(0,0), 0); 
test2.setAsBox(10, 20, new Vector2(0,0), 0); 

if (test1.equals(test2))System.out.println("equals"); 
+0

さて、 'cos' equals'メソッドは 'PolygonShape'クラスでオーバーライドされません。あなたが本当にそれらを比較する必要があるなら、私はGitHubで問題を提起するでしょう。 – Enigo

+0

おそらく回避策を見つけようとします。それは簡単かもしれません – NuclearVirus

答えて

0

PolygonShapeクラスには事前に定義されたequals機能はありませんが、あなた自身を書くには余りにも難しいことではないでしょう。次のように:

boolean polygonEqual(PolygonShape a, PolygonShape b) { 
    int n = a.getVertexCount(); 

    //If the two shapes have differing numbers of vertices they can't be equal 
    if (n != b.getVertexCount()) return false; 

    //Check if all the vertices are equal 
    Vector vA, vB; 
    for (int i = 0; i < n; i++) { 
     a.getVertex(i, vA); 
     b.getVertex(i, vB); 

     if (!a.equals(b)) return false; 
    } 

    //Now they must be equal 
    return true; 
} 

注:の頂点の順序も同じである場合にのみ動作します。同じ頂点が2つの異なるポリゴンにありますが、いくつかのインデックスによってシフトされている場合があります。しかし、あなたの例ではsetAsBoxしか使われていないので、この関数は比較として十分であるはずです。

+0

すでに回避策が見つかりました。実際、アルゴリズム全体がずっと簡単になりました。私は、新しいフィクスチャを追加する前に、ボディに特定の形状のフィクスチャが既に存在するかどうかをチェックしたかったのです。 – NuclearVirus

+0

(Body.getFixtureList()。私は今、私のshapeListからすでにボディに含まれているシェイプを削除しているので、複数回見つけられません。 – NuclearVirus

関連する問題