2017-03-04 46 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); 
相关问题