2016-08-29 2 views
0

Wie würdest du einen Joint in box2d rendern? Zum Beispiel, wenn Sie einen Greifhaken machen würden, wie schaffen Sie es, dass ein Sprite oder etwas genau seinen Bewegungen folgt? Ich habe versucht, einen Körper zu schaffen, der auf der gleichen Position wie das Gelenk ist, aber ich kämpfe sehr viel, es zu allen Zeiten auf der Oberseite des Gelenks zu sein.Rendern einer Verbindung? [libGDX/Box2D]

+0

Zeigen Sie, was Sie so weit gekommen, einige Code – Draz

+0

Heres mein Seil Klasse, ATM Ich habe es so, dass ein Bündel von Körpern durch Fernverbindungen Form verbunden ein kettenartiges Ding, das soll das Seil sein, das den Spieler mit der Wolke verbindet. Dies funktioniert nicht, da die Gelenke in box2d saugen und anfangen, mit der geringsten Kraft zu spazzieren. http://pastebin.com/3qQMQ0Xw Ich wollte versuchen, es zu einem einzigen großen Segmenten zu machen verbindet beide Spieler und Decke, um zu sehen, ob es stabiler ist (und dann nur ein Sprite zu diesem Körper hinzufügen, um es zu rendern), Im Moment weg von zu Hause aus kann ich es nicht versuchen, aber hoffentlich siehst du, was mein Ziel ist. –

+0

Möchten Sie Kollisionen am Seil ermöglichen? Wenn ja, dann benutze Drehgelenke an deinem Seilkörper. Wenn nicht, dann brauchst du keinen Körper, um ein Seil zu zeichnen. – Draz

Antwort

1

Alles, was Sie tun müssen, ist das Folgende:

Sie setzen den Ursprung Ihres gewünschten Sprites einmal auf den Rotationspunkt (z. B. untere Mitte).

sprite.setOrigin(sprite.width()/2, 0); 

Sie bestimmen den Winkel des Vektors beween den beiden Anker Ihrer Abstand Joint in oyur Update-Methode. Beachten Sie, dass Sie möglicherweise lokale Anker in Worldpoints konvertieren müssen.

float angle = playerAnchorPoint.sub(ceilingAnchorPoint).angle(); 

und Sie setzen Position und Winkel:

sprite.setPosition(playerAnchor.x - sprite.width()/2, playerAnchor.y); 
sprite.setRotation(angle); 
+0

Ich habe es versucht, aber ich schein etwas falsch mit der Rotation zu tun, weil das Psrite nur nicht rotiert. Was meinst du mit der Umwandlung in Weltpunkte? –

+0

Nun, Sie setzen die Ankerpunkte Ihres Körpers in lokalen Koordinaten (relativ zum Körperzentrum). Um den Vektor von Spieler-Körper zu Decke-Körper zu bekommen, müssten Sie die lokalen Daten in Weltdaten umwandeln. So: Playerbody.getWorldPoint (Joint.getLocalAnchorA) und decke body.getWorldPoint (Joint.getLocalAnchorB) – Draz

+0

Okay, ich habe es jetzt etwas funktioniert, es scheint sich um den richtigen Weg zu drehen, aber es geht super schnell, vielleicht etwas mit dem PPM zu tun Wert .. Ill es herausfinden. Danke für die Hilfe! –