2017-01-26 28 views
0

Я пытаюсь повернуть textureRegion, на основе Box2D угла тела, используя spriteBatcher рисовать метод:Вращающийся textureRegion на основе угла тела Box2D (без спрайта)

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

Однако в результате вращения выглядит следующим образом

enter image description here Я не могу понять, что я делаю неправильно, попробовал много разных комбинаций originX, originY, и он всегда сломан. Пытался установить происхождение в центр тела, левый нижний угол и не повезло.

Посмотрел документацию, проанализировал SpriteBatch.class, но ее непонятно, в чем причина.

Как правильно повернуть текстуру?

EDIT: Я не могу использовать класс Sprite, потому что textureRegion что втягивается является кадр анимации и AFAIK вы не можете сделать кадры анимации из Sprite класса

ответ

1

Набор polygonshape из Box2D тела как этот

float width=x,height=y; 

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

методом setAsBox из PolygonShape перегружен.

+0

Я с помощью этого метода уже, как это: \t \t shape.setAsBox ((animation.getWidth() - animation.getHorizontalOffset())/200F, \t \t \t \t (animation.getHeight() - animation.getBottomOffset())/200f, новый Vector2 ((animation.getWidth() - animation.get HorizontalOffset())/200F, (animation.getHeight() - animation.getBottomOffset())/200F), 0); , но добавив 2 параметра, которые вы упомянули, делает коробку безумной. – Zerg

+0

прежде всего сделайте простой расчет, поэтому удалите смещение и проверьте результат. – Aryan

+1

смещение должно быть умножено на 2 – Aryan

1

начало координат находится в левом нижнем углу изображения , поместите его в центр изображения. Так что сделайте изначальныйX ширина/2 и изначальныйY высота/2.

+0

попробовал это сейчас, его все еще вращается, как на картинке, которую я приложил – Zerg

+0

вы переходите в градусы? body.getAngle() возвращает вращение в радианах, но вам нужно его по градусам для SpriteBatch.draw – Lestat

+0

Я использую это как параметр вращения: (float) Math.toDegrees (body.getAngle()) – Zerg

 Смежные вопросы

  • Нет связанных вопросов^_^