Box 2D Set Origin


8

Ich versuche, den Ursprung einer box2d-Form festzulegen. Standardmäßig dreht sich eine Form um die Mitte. Aber ich versuche, es dazu zu bringen, sich links von der Form zu drehen. Wie eine Uhr zum Beispiel.

Ich habe von Dingen wie SetXForm gehört, aber diese Funktion scheint nicht einmal zu existieren. Ich benutze C ++ für den Fall, dass Sie das wissen müssen.

Vielen Dank im Voraus, jede Hilfe wird geschätzt.

2d  physics  box2d 

Antworten:


6

Es gibt zwei Arten von Formen und drei Möglichkeiten, sie in Box2D zu erstellen.

Eine b2CircleShape hat immer ihren Mittelpunkt in der Mitte des Kreises. Wenn Sie einen "einseitigen Kreis" erstellen möchten, müssen Sie den Kreis mit einer Verbindung an einem anderen Objekt (z. B. einem winzigen Kreis darin) befestigen.

Eine b2PolygonShape kann mit SetAsBox initialisiert werden. SetAsBox platziert den Ursprung standardmäßig in der Mitte des Rechtecks. Sie können jedoch ein b2Vec2 als drittes Argument übergeben, um den Ursprung an einer anderen Stelle zu platzieren.

Eine Nicht-Box-b2PolygonShape wird mit dem Ursprung an den lokalen Koordinaten 0,0 initialisiert. Um eine Form zu erstellen, die nur eine Richtung umfasst, z. B. nach rechts und oben, geben Sie einfach Koordinaten wie (0, 0), (0, 5), (5, 5), (5, 0) an und konstruieren Sie die Form nur entlang lokaler Koordinaten die sich nach oben und rechts bewegen (und in CCW-Wicklungsreihenfolge).

Denken Sie daran, dass der Ursprung der Form immer die lokale Koordinate (0, 0) ist. Wenn Sie versuchen, es als "Verschieben des Ursprungs" zu betrachten, werden Sie sich nur verwirren - was Sie tun, ist, die anderen Scheitelpunkte relativ zum Ursprung zu versetzen.


2

Egal, ich zähle die Antwort. Anscheinend in der b2PolygonShape, wenn Sie die Funktion aufrufen

SetAsBox ()

Es gibt 2 Überladungen. Und einer von ihnen ist:

SetAsBox (halbe Breite, halbe Höhe, Mitte, Winkel);

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.