Java Libgdx - Box2d setTransform带有关节的多个物体

标签 java libgdx box2d box2d-joints

我有一组主体,附有一些关节(轮关节、棱柱关节、旋转关节)

我正在尝试使用 setTransform 方法将这组主体移动到某个位置

我决定只将一个 body 移动到该位置,由于关节的原因,其他 body 应该跟随。

我得到了一个奇怪的结果, body 开始滚动,移动到任何地方,一个真正奇怪的结果,这里有一些图像来解释:

enter image description here

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

注意:从 A 点到 B 点(移动),没有任何障碍物穿过该物体

最佳答案

来自 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计算为主体的终点和起点相减。当物体到达目标时,您应该处理停止物体(通过将其速度归零)。

请注意,setLinearVelocity 并不取决于您的重力

<小时/>

第二个解决方案就是对这个“联合组”中的所有物体设置Transform。您可以迭代物体并根据它们的起始位置和目标 vector 移动它们

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

关于Java Libgdx - Box2d setTransform带有关节的多个物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32325666/

相关文章:

java - Android - 布局内其他 View 中的中心 View

java - 如何使用 Apache POI 在不同行创建多个自动筛选器

java - 如何为 libGDX 设置 JAVA_HOME?

java - libgdx - 检查 body 是否被触摸

java - 当 box2d 实体数量超过 300 时,在移动设备上的性能非常低

java - ADT 到 Android Studio 意外顶级异常

java - 为什么我无法删除 jtable 中的单元格

java - LibGDX resize window - 缩放字体

android - 如何使用Libgdx绘制网格并处理每个方 block 的点击事件

java - libGDX Box2D 在从地面掉落之前转身