Java, libgdx, box2d, Creating a Weld Joint 当两个物体碰撞时

标签 java libgdx box2d

我有两个碰撞的圆圈。

我想在它们碰撞时将它们焊接在一起。 beginContact 函数中的代码是

WeldJointDef def = new WeldJointDef();

def.collideConnected=false;
Vector2 worldCoordsAnchorPoint = bodyA.getWorldPoint(new Vector2(0.0f,0.0f)); 

def.bodyA = bodyA;
def.bodyB = bodyB;

def.localAnchorA.set( def.bodyA.getLocalPoint(worldCoordsAnchorPoint) );
def.referenceAngle = def.bodyB.getAngle() - def.bodyA.getAngle();


def.initialize(def.bodyA, def.bodyB, worldCoordsAnchorPoint);

world.createJoint(def); 

代码运行时,出现了一个c++错误,但描述性不强:

AL lib: (EE) alc_cleanup: 1 device not closed
Assertion failed!

Program: C:\Program Files\Java\jre7\bin\javaw.exe
File: /var/lib/jenkins/workspace/libgdx/extensions/gdx-box2d/gdx-box2d/jni/Box2D/Dynamics/b2World.cpp, Line 214

Expression: IsLocked() == false

如何使焊缝正常工作?或者您不能以这种方式即时创建焊缝吗?

最佳答案

不要在接触监听器中创建关节,首先将物体添加到某种列表中,然后在 world.step() 之后创建关节。

您可以在这里查看他们的表现:http://www.iforce2d.net/b2dtut/sticky-projectiles

所以恢复,方法是这样的:

-onContactListener --> 将 BodyA 和 BodyB 引用添加到列表中。 (就像他们对“StickyInfo 对象”所做的那样)。

-在 world.step() 之后 --> 使用前面的列表,为所需的物体创建关节。

关于Java, libgdx, box2d, Creating a Weld Joint 当两个物体碰撞时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24219619/

相关文章:

java - 写入 .doc 文件

java - libGDX 移动 3D 模型

java - 我怎么能每秒都做点什么? [LibGDX]

ios - 似乎无法让 ApplyForce() 以一种有意义的方式工作

java - 删除body box2d

java - Android 应用程序 SQLiteDatabase 插入新值不起作用,代码中有 0 个错误

java - 内存不足,无法处理大型文本文件并将其写回 xml

java - 无法在 libgdx 中隐藏碰撞图像?

java - Box2D 灯光在 scene2d Actor 绘制之间渲染

多个类中的 Java 按钮操作