2017-01-26 3 views
0

Ich versuche, eine textureRegion zu drehen, basierend auf box2d Körperwinkel, unter Verwendung der spriteBatcher Verfahren zeichnen:Rotating textureRegion basierend auf Box2D Körperwinkel (ohne Sprite)

SpriteBatch.draw(TextureRegion region, float x, float y, float originX, float originY, float width, float height,float scaleX, float scaleY, float rotation) 

jedoch die resultierende Rotation wie diese

sieht

enter image description here Ich kann nicht herausfinden, was ich falsch mache, haben viele verschiedene Kombinationen von originX, HerkunftY ausprobiert und es ist immer gebrochen. Versucht, die Ursprünge auf das Zentrum des Körpers, linke untere Ecke und kein Glück zu setzen.

Guckte auf die Dokumentation, analized die SpriteBatch.class, aber es ist unklar für mich, was der Grund ist.

Wie man die Textur richtig dreht?

EDIT: Ich kann nicht Sprite-Klasse verwenden, da die textureRegion, die gezogen wird, ein Animationsrahmen ist und afaik nicht Animationsframes aus Sprite-Klasse

Antwort

1

Set polygonshape von box2d Körper wie dieser

float width=x,height=y; 

PolygonShape polygonShape=new PolygonShape(); 
polygonShape.setAsBox(width/2, height/2,new Vector2(width/2,height/2),0); 

setAsBox Methode von PolygonShape ist überlastet.

+0

Ich bin Mit diesem Verfahren bereits, wie folgt aus: \t \t shape.setAsBox ((animation.getWidth() - animation.getHorizontalOffset())/200F, \t \t \t \t (animation.getHeight() - animation.getBottomOffset())/200f, neuer Vector2 ((animation.getWidth() - animation.get HorizontalOffset())/200f, (animation.getHeight() - animation.getBottomOffset())/200f), 0); aber das Hinzufügen der 2 Parameter, die Sie erwähnt, macht die Box verrückt – Zerg

+0

machen zunächst einfache Berechnung, so entfernen Sie Offset und überprüfen Sie das Ergebnis. – Aryan

+1

Offset sollte mit 2 multipliziert – Aryan

1

Der Ursprung ist in der unteren linken Ecke des Bildes machen , lege es in die Mitte des Bildes. Machen Sie also HerkunftX Breite/2 und UrsprungHöhe/2.

+0

versucht, dass jetzt, es immer noch wie in dem Bild rotiert, das ich angehängt habe – Zerg

+0

konvertieren Sie zu Grad? body.getAngle() gibt die Drehung im Bogenmaß zurück, aber Sie benötigen sie für Grad für SpriteBatch.draw – Lestat

+0

Ich verwende dies als Rotationsparameter: (float) Math.toDegrees (body.getAngle()) – Zerg