2014-11-18 1 views
1

После столкновения 2 точки я хочу их сделать 1 точку с двойным радиусом моего кодаPhysicsJS изменить радиус окружности

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 точек пропадают в один момент.

Правильно ли мой код?

ответ

1

Вы не можете иметь массу нуля. Если вы хотите попробовать установить массу очень маленькой.

Возможно, у вас также возникли проблемы с обновлением представлений рендеринга. Это легко, просто установите .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() 
    } 
}); 
+0

Мне нужно 2 точки после столкновения сделать 1 больше. Изменение радиуса не работает, делая это по-своему. –

+0

мой ошибка. Вам нужно изменить свойство .geometry.radius. Не радиус на теле. Если вам не нужен bodyB, тогда подумайте о том, чтобы просто удалить его из мира после того, как он столкнулся с 'world.remove()' – Jasper