2010-10-31 4 views
4

Как я могу повернуть объект в 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); 

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

+0

Полагаю, вы используете jBox2D? – Skurmedel

+0

да я использую box2d для java/android/rokon – lacas

ответ

2

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

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); 
2

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

1

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

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

этот код пусть прибоя тела.

2

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

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

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

b2body->SetAngularVelocity(<float32>)

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

0

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

float rotation = MathUtils.PI; // target rotation 

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

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

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