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

..但不工作。

4

5 回答 5

2

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

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

如果您想连续旋转身体,请使用 SetAngularVelocity 方法,例如

b2body->SetAngularVelocity(<float32>)

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

于 2014-03-12T11:18:35.207 回答
2

首先,对象必须是动态的或运动学的才能旋转,此外还用于SetAngularVelocity()实现旋转。

于 2011-06-07T16:49:02.807 回答
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);
于 2011-02-04T13:04:39.160 回答
1

我认为您可以使用武力或冲动,而不是直接使用 setTransform 方法。例子:

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

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

于 2012-06-18T09:40:18.407 回答
-1

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

float rotation = MathUtils.PI; // target rotation

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

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

于 2016-12-01T18:20:23.980 回答