2016-04-23 20 views
1

Wie überprüfe ich, ob eine PolygonShape dieselbe ist wie eine andere? .equals() funktioniert nicht. Dieser Code wird nicht "gleich" gedruckt.Wie vergleiche ich 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

Nun, das passiert 'cos 'equals' Methode wird in' PolygonShape' Klasse nicht überschrieben. Ich würde ein Problem auf dem GitHub ansprechen, wenn Sie wirklich vergleichen müssen. – Enigo

+0

Ich werde wahrscheinlich versuchen, einen Workaround zu finden. Das könnte leichter sein – NuclearVirus

Antwort

0

Es gibt keine vordefinierte equals Funktion für die PolygonShape Klasse, aber es wäre nicht zu hart sein, eigene zu schreiben. Wie folgt:

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; 
} 

Hinweis: dies funktioniert nur, wenn die Reihenfolge der Scheitelpunkte ist ebenfalls gleich. Es kann der Fall sein, dass die gleichen Scheitelpunkte in zwei verschiedenen Polygonen liegen, aber um einen Index verschoben sind. Da Ihr Beispiel jedoch nur setAsBox verwendet, sollte diese Funktion als Vergleich ausreichen.

+0

Eine Umgehung bereits gefunden. Eigentlich ist der ganze Algorithmus jetzt viel einfacher. Ich wollte prüfen, ob es bereits eine Fixture mit einer bestimmten Form in einem Körper gibt, bevor eine neue Fixture hinzugefügt wird: if (body.getFixtureList(). Get (i) .getShape(). Ist gleich (shape)) ... – NuclearVirus

+0

Ich entferne jetzt nur die Formen, die bereits in einem Körper von meiner ShapeList enthalten sind, so dass sie nicht mehrfach gefunden werden können. – NuclearVirus

Verwandte Themen