2017-03-04 47 views
-1

我到處搜索,看起來很好的問題和文檔,但它看起來appart從兩個加農炮身體之間創建約束,沒有辦法對不同羣衆的形狀進行分組(例如)。如何在Cannon.js中對對象體(父/子)進行分組?

對於我使用lockConstraint但這是一個黑客......有時,當我的對象碰撞時,「」兒童「旋轉」對象不想要的位置suddently轉動的那一刻...

有一個更正確的方法來做到這一點?

編輯:我想要實現的是:我創造了一輛車,我希望他的重心位於四個車輪的中心。 爲此,我創建了一個.collisionResponse設爲0的物體,並將我想要的質量定位在車輪中心。 然後,我創建了一個很小的質量和新的CANNON.LockConstraint(chassisBody, mass, 0.5)機箱,允許2個對象被「分組」。

+0

你能描述一下你想達到的目標嗎? – schteppe

+0

@schteppe非常感謝您的關注,我編輯了我的答案。偉大的thx爲您的工作和lib兄弟! –

+0

謝謝。只是要清楚,在製造車輛時,如何移動底盤車身的質量中心? – schteppe

回答

1

無法在Cannon.js中設置每個形狀的質量/密度。但是,您可以將質心移近較重的形狀以獲得相同的效果。

錘子是一個很好的例子,因爲在典型的錘子中,杆頭的密度比杆身大得多。如果你扔一個錘子,它會繞着它的頭部旋轉一點,因爲頭部比杆身重。

要在cannon.js中製作一把錘子,您可以使用兩個盒子。

var head = new CANNON.Box(new CANNON.Vec3(2,1,1)); 
var shaft = new CANNON.Box(new CANNON.Vec3(0.5,3,0.5)); 

現在,組裝形狀爲一個身體,你做這樣的事情:

var body = new CANNON.Body({ mass: 1 }); 
body.addShape(shaft, shaftPosition); 
body.addShape(head, headPosition); 

根據不同的形狀位置使用(shaftPosition,headPosition),你可以在本地更改其位置身體,同時,他們的位置相對於質心(又名旋轉中心)。 設置headPosition =(0,0,0)和shaftPosition =(0,3,0)會使錘子在投擲錘子時繞着頭部旋轉。但是如果反過來,錘子會圍繞軸的中心旋轉......看起來頭部和軸的密度相似。嘗試不同的位置,找到相對於形狀的完美旋轉中心。

Body#addShape的完整簽名可以讓您添加一個完整的剛性變換來定位身體內的形狀。它是:

body.addShape(shape, position, quaternion); 
相關問題