Java Libgdx - Box2d setTransform multiple bodys with joints

Java Libgdx - Box2d setTransform multiple bodies with joints

我有一组body,附有一些关节(wheel-joint,prismatic-joint,revolute-joint)

我正在尝试使用方法 setTransform

将那组 body 移动到某个位置

我决定只移动一个body到这个位置,其他的身体因为有关节所以应该跟随。

我得到一个奇怪的结果,身体开始滚动,无处可去,一个真正奇怪的结果,这里有一些图片来解释:

如何使用 setTransform 将多个附有关节的物体移动到一个位置?

注:从A点到B点(移动)object没有障碍物

来自 box2d setTransform() 参考:

Set the position of the body's origin and rotation. This breaks any contacts and wakes the other bodies. Manipulating a body's transform may cause non-physical behavior.

我认为问题出在您试图用来移动 body 的机制上,而 setTransform 的方法不正确。

而不是考虑使用

void com.badlogic.gdx.physics.box2d.Body.setLinearVelocity(Vector2 v)

您可以计算 v 作为 body 的终点和起点的减法。当它到达目标时,您应该处理停止 body(通过将其速度归零)。

请注意setLinearVelocity不依赖于重力


第二种解决方案就是对这个 "joint group" 中的所有物体进行 setTransform。您可以遍历物体并根据它们的起始位置和目标向量移动它们

for(Body body : jointGroup)
{
    body.setTransform(body.getPosition.x - someX, ...)
    ...