1
我有兩個相互碰撞的圓。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
我如何焊接工作?或者你不能以這種方式在飛行中創建焊接接頭?
我不完全確定是什麼原因造成的,因此我不會提交答案,但可能是您在碰撞模擬過程中編輯了對象。 [This](http://gamedev.stackexchange.com/questions/27113/what-is-the-proper-way-to-remove-a-box2d-body-from-the-world-in-libgdx)似乎是同樣的問題,但刪除身體,而不是焊接。 – SneakyB
SneakyB是正確的。您無法在世界步驟中修改模擬。在步驟完成後,您必須注意碰撞的物體並創建關節。 –
這是在這裏回答。 http://stackoverflow.com/questions/21293923/how-to-make-two-bodies-stick-after-a-collision,它適用於我,我希望這可以幫助你。 – Lematva