Box2D如何旋转一个物体?

发布于 2024-09-29 19:23:06 字数 249 浏览 1 评论 0原文

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

...但不起作用。

How I can rotate an object in Box2D? Tried..

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

..but not working.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

橪书 2024-10-06 19:23:06

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

Firstly the object must be a dynamic or kinematic to be able to be rotated,
in addition use SetAngularVelocity() to achieve the rotation.

梦里的微风 2024-10-06 19:23:06

如果你想将对象旋转到某个角度,那么你可以使用 setTransform 方法,如

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

如果你想连续旋转主体,那么使用 SetAngularVelocity 方法,如

b2body->SetAngularVelocity()

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

If you want to rotate the object to an angle then you use setTransform method like

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

And if you want to rotate the body continuously then use SetAngularVelocity method like

b2body->SetAngularVelocity(<float32>)

Remember b2body object must be a dynamic or kinematic to be able to be rotated.

浸婚纱 2024-10-06 19:23:06

使用世界中心代替位置,就像这样

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

use the world center instead position, like this

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);
凌乱心跳 2024-10-06 19:23:06

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

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

这段代码让正文死记硬背。

I think you can use force or impulses,not use setTransform methord directly.
example:

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

this code let body rote.

变身佩奇 2024-10-06 19:23:06

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

float rotation = MathUtils.PI; // target rotation

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

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

The idea is to rotate to an angle, the easiest method I found by myself is to use:

float rotation = MathUtils.PI; // target rotation

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

the body will rotate quicker at the beginning and slower at the end but you can use Interpolation function to achieve desired speed of rotation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文