Box2D вращать объект, как? - PullRequest
       24

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

4 голосов
/ 31 октября 2010

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

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

Ответы [ 5 ]

2 голосов
/ 12 марта 2014

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

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

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

b2body->SetAngularVelocity(<float32>)

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

2 голосов
/ 07 июня 2011

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

2 голосов
/ 04 февраля 2011

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

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);
1 голос
/ 18 июня 2012

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

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

этот код позволяет телу вращаться.

0 голосов
/ 01 декабря 2016

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

float rotation = MathUtils.PI; // target rotation

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

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

...