2014-03-06 19 views
1

我試圖通過連接一個靜態和動態物體來使用box2d/libgdx創建鐘擺。 我嘗試了各種類型的關節,如距離關節,繩索關節和旋轉關節,但是在重力作用下,動態身體總是在最初受到關節約束後最終逃脫。只有在零重力下,接頭才能正常工作。我知道我一定在做一些非常愚蠢的事情。libgdx + box2d關節在重力下不能正常工作

 world.getBodies(p); 
     DistanceJointDef djd=new DistanceJointDef(); 
     djd.bodyA=p.get(0); 
     djd.bodyB=p.get(1); 
     djd.localAnchorA.set(0,0); 
     djd.localAnchorB.set(0,0); 
     djd.collideConnected=true; 
       DistanceJoint pend=(DistanceJoint)world.createJoint(djd); 
     pend.setLength(50); 

PS。我還沒有實現一個聯繫偵聽器。我還沒有想出如何做到這一點。將搭建一個碰撞監聽器有幫助嗎?

+0

您的動態身體是否具有非零密度? – user3312130

回答

0

如果我正確地得到您的問題,您的運動身體會下降,不管您應用的關節類型如何。爲什麼會出現這種情況的原因之一是因爲你可能已經將錨和擺定義爲動態物體,並且都因重力而同樣出現。

我假設你還沒有渲染錨體,所以你看不到它下降。

1

我試過你的確切代碼,它的工作原理。 Here的完整測試:
@ user3312130:它的密度也爲零。

確保你至少有一次速度迭代。當我使用零點時,關節緩慢擴展。

ContactListener與此無關,它無濟於事。

另一件事:您將DistanceJoint的長度設置爲50米。距離相當遠。 Box2D針對1x1米物體進行了優化。它仍然可以正常工作,並且我測試了它,但是您應該使用更小的對象和更小的相機視口。

+0

我試過你的代碼,它的工作原理,但我仍然不知道爲什麼我不能做到這一點,我的代碼稍微複雜,但基本上相同 – ARK

+0

如果你與我們分享更多的代碼,我們可以搜索錯誤。我有這樣的唯一想法是,你可以用零速迭代來推動世界。 – dermetfan