Box2D旋转一个物体,怎么样?

时间:2010-10-31 14:46:32

标签: java android rotation 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);

..但没有工作。

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

首先,对象必须是动态运动才能旋转, 另外使用 SetAngularVelocity() 来实现轮换。

答案 2 :(得分:2)

如果要将对象旋转到某个角度,则使用setTransform方法,如

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

如果你想连续旋转身体,那么使用像

这样的SetAngularVelocity方法

b2body->SetAngularVelocity(<float32>)

请记住,b2body对象必须是动态或动态才能旋转。

答案 3 :(得分:1)

我认为你可以使用武力或冲动,而不是直接使用setTransform methord。 例如:

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

这段代码让身体死记硬背。

答案 4 :(得分:0)

我的想法是旋转到一个角度,我自己找到的最简单的方法就是使用:

float rotation = MathUtils.PI; // target rotation

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

主体在开始时会旋转得更快,在结束时会更慢,但您可以使用插值功能来实现所需的旋转速度。