Box2D вращает объект, как?

Как я могу повернуть объект в Box2D? Пытался..

private static final double DEGREES_TO_RADIANS = (double)(Math.PI/180);
float angle = (float) (45*DEGREES_TO_RADIANS);
object.body.setTransform(object.body.getPosition(), angle);

..но не работает.


person lacas    schedule 31.10.2010    source источник
comment
Я так понимаю, вы используете jBox2D?   -  person Skurmedel    schedule 31.10.2010
comment
да, я использую box2d для java/android/rokon   -  person lacas    schedule 31.10.2010


Ответы (5)


Во-первых, объект должен быть динамическим или кинематическим, чтобы его можно было вращать, кроме того, используйте SetAngularVelocity() для поворота.

person cocos2dcocos    schedule 07.06.2011

Если вы хотите повернуть объект под углом, вы используете метод setTransform, например

b2body->SetTransform( playerBody_->GetPosition(), angleInRadian );

И если вы хотите непрерывно вращать тело, используйте метод SetAngularVelocity, например

b2body->SetAngularVelocity(<float32>)

Помните, что объект b2body должен быть динамическим или кинематическим, чтобы его можно было вращать.

person Ali Raza    schedule 12.03.2014

вместо этого используйте положение мирового центра, например

private static final double DEGREES_TO_RADIANS = (double)(Math.PI/180);
float angle = (float) (45*DEGREES_TO_RADIANS);
object.body.setTransform(object.body.getWorldCenter(), angle);
person Matrix Bai    schedule 04.02.2011

Я думаю, вы можете использовать силу или импульсы, а не использовать метод setTransform напрямую. пример:

body->ApplyForce( b2Vec2(force,0), body->GetWorldPoint( b2Vec2(1,1) ) );

этот код пусть тело гниет.

person Snow    schedule 18.06.2012

Идея состоит в том, чтобы повернуть на угол, самый простой способ, который я нашел сам, - это использовать:

float rotation = MathUtils.PI; // target rotation

float c = 1; //speed of rotation
float q = rotation-groundBody.getAngle();
groundBody.setAngularVelocity(c*q);

тело будет вращаться быстрее в начале и медленнее в конце, но вы можете использовать функцию интерполяции для достижения желаемой скорости вращения.

person LionH    schedule 01.12.2016