でオブジェクトを回転するにはどうすればよい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);
..しかし、機能していません。
オブジェクトをある角度に回転させたい場合は、 setTransform メソッドを次のように使用します
b2body->SetTransform( playerBody_->GetPosition(), angleInRadian );
体を連続的に回転させたい場合は、次のように SetAngularVelocity メソッドを使用します
b2body->SetAngularVelocity(<float32>)
回転できるようにするには、b2body オブジェクトが動的またはキネマティックである必要があることに注意してください。
まず、オブジェクトは、回転できるようにするために動的またはキネマティックSetAngularVelocity()
である必要があり、さらに回転を実現するために使用する必要があります。
このように、位置の代わりに世界の中心を使用します
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);
setTransform メソッドを直接使用するのではなく、力またはインパルスを使用できると思います。例:
body->ApplyForce( b2Vec2(force,0), body->GetWorldPoint( b2Vec2(1,1) ) );
このコードは体を回転させます。
アイデアは、角度を付けて回転させることです。私が自分で見つけた最も簡単な方法は、次を使用することです。
float rotation = MathUtils.PI; // target rotation
float c = 1; //speed of rotation
float q = rotation-groundBody.getAngle();
groundBody.setAngularVelocity(c*q);
本体は最初は速く回転し、最後は遅く回転しますが、補間機能を使用して希望の回転速度を実現できます。