在
2 个点碰撞后,我希望他们制作 1 个双半径的点,所以我的代码
world.on("collisions:detected", function(data) {
data.collisions[0].bodyA.mass *=2
data.collisions[0].bodyA.radius *=2
data.collisions[0].bodyB.mass = 0
data.collisions[0].bodyA.recalc()
data.collisions[0].bodyB.recalc()
})
半径不会改变,有时 2 个点的奇怪行为会在一瞬间消失。
我的代码正确吗?
质量不能为零。如果您想尝试将质量设置为非常小。
您可能还遇到渲染器的视图未刷新的问题。这很简单,只需将每个身体上的.view
设置为null
即可。
我还建议使用此处描述的策略之一使您的代码更加通用:https://github.com/wellcaffeinated/PhysicsJS/wiki/Collisions
这样,如果您向模拟中添加更多实体,它仍然可以工作。例如:
myCatBody.label = 'cat;
myDogBody.label = 'dog;
// query to find a collision between a body with label "cat" and a body with label "dog"
var query = Physics.query({
$or: [
{ bodyA: { label: 'cat' }, bodyB: { label: 'dog' } }
,{ bodyB: { label: 'dog' }, bodyA: { label: 'cat' } }
]
});
// monitor collisions
world.on('collisions:detected', function( data, e ){
// find the first collision that matches the query
var found = Physics.util.findOne( data.collisions, query );
if ( found ){
found.bodyA.mass *= 2;
found.bodyA.geometry.radius *= 2;
found.bodyB.mass = 0.001;
found.bodyA.view = null;
found.bodyB.view = null;
found.bodyA.recalc();
found.bodyB.recalc()
}
});