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, ...)
...
我有一组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, ...)
...