Вы не можете иметь массу нуля. Если вы хотите попробовать установить массу очень маленькой.
Возможно, у вас также возникли проблемы с обновлением представлений рендеринга. Это легко, просто установите .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()
}
});
Мне нужно 2 точки после столкновения сделать 1 больше. Изменение радиуса не работает, делая это по-своему. –
мой ошибка. Вам нужно изменить свойство .geometry.radius. Не радиус на теле. Если вам не нужен bodyB, тогда подумайте о том, чтобы просто удалить его из мира после того, как он столкнулся с 'world.remove()' – Jasper