Box2D如何旋转物体?

5

如何在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);

但是没有起作用。


我猜你在使用jBox2D? - Skurmedel
是的,我在Java / Android / Rokon中使用Box2D。 - lacas
5个回答

2
首先,为了能够旋转物体,该物体必须是动态或运动学的。此外,使用 SetAngularVelocity() 方法来实现旋转。

2

如果您想将对象旋转到某个角度,则可以使用setTransform方法,例如:

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

如果您想让物体持续旋转,则可以使用SetAngularVelocity方法,例如:

b2body->SetAngularVelocity(<float32>)

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


1

使用世界中心而不是位置,像这样

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

我认为你可以使用力或脉冲,而不是直接使用setTransform方法。

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

这段代码让主体旋转。


-1

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

float rotation = MathUtils.PI; // target rotation

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

身体在开始时会更快地旋转,最后会变慢,但您可以使用插值函数来实现所需的旋转速度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接