Libgdx Gekacheltes Map-Objekt in den Box-Ort body2d

9

Ein gekacheltes Kartenobjekt hat eine Position x, y in Pixeln und eine Drehung in Grad.

Ich lade die Koordinaten und die Rotation von der Karte und versuche, sie einem box2d Body zuzuordnen. Es gibt einige Unterschiede zwischen den Standortmodellen, z. B. ist die Drehung von gekippten Objekten in Grad und der Körperwinkel von box2d in Radianten.

Wie konvertiere ich den Ort in die BodyDef-Koordinaten x, y und Winkel, so dass der Körper an der richtigen Position erstellt wird?

Hintergrund:

Verwendung des Codes:

%Vor%

Funktioniert, wenn die Drehung 0 ist, der Körper jedoch nicht korrekt positioniert ist, wenn die Drehung von 0 abweicht.

Ich habe hier ein paar Hinweise gefunden:

Ссылка

und hier:

Ссылка

Das scheint genau dieses Problem anzugehen, jedoch hat keine Lösung für mich funktioniert, die Körperobjekte sind nach der Anwendung dieser Transformationen immer noch falsch positioniert. Mit falsch positioniert meine ich, dass der Körper in dem Bereich der Karte positioniert ist, in dem er je nach Drehung sein sollte.

Ich finde, dass es ziemlich einfach sein sollte, aber ich weiß nicht, wie ich die Unterschiede zwischen Tiled und box2d Standorten vermitteln soll.

Als Referenz sind dies die beiden Lösungen, die ich aus den obigen Links probiert habe (nachdem die Werte x, y, width, height von Pixeln in Welteinheiten transformiert wurden):

%Vor%

und

%Vor%

Jeder Hinweis wäre sehr willkommen.

    
Aleris 31.01.2016, 14:34
quelle

1 Antwort

0

Gefunden die richtige Lösung, verloren etwa 1 Tag meines Lebens:)

Die Informationen von obigen Links sind falsch und / oder veraltet. Momentan speichert Tiled die Objektposition abhängig vom Typ. Ein Bild ist relativ zur Position unten links.

Box2d hat nicht wirklich einen "Ursprungspunkt", aber Sie können seinen Mittelpunkt in Betracht ziehen und die Formen der am Körper befestigten Fixtures sollten relativ zu (0,0) positioniert sein.

Schritt 1: Gelesene Eigenschaften lesen

%Vor%

Schritt 2: Skalieren Sie diese entsprechend Ihrer Weltgröße box2d, zum Beispiel x = x * 1/25; usw.

Schritt 3: Erstellen Sie einen Körper ohne Position oder Winkel.

Schritt 4: Körperposition und -winkel mit:

transformieren %Vor%

Ich hoffe, es hilft.

    
Aleris 03.02.2016, 12:45
quelle

Tags und Links