Фон
Я пытаюсь выяснить на высоком уровне, почему я получаю неожиданное поведение, используя b2.js (библиотека-оболочка для box2d).Я пытаюсь смоделировать кристаллические структуры частиц в химической системе (все представлены в виде b2body
прямоугольников), и поэтому я подумал, что смогу связать частицы, используя b2Joint
веревку объекты и создание жесткой решетки из отдельных прямоугольников.
Когда я просто размещаю частицы b2Body на экране и не соединяю их, физика тел выглядит правильно.Однако, когда я связываю единицы кристалла с b2Joint
, ящики b2Body
теперь могут перекрываться и проникать друг в друга .
Я не уверен, почемуэто происходит, и я буду признателен за любые рекомендации.
Видео о поведении
https://www.youtube.com/watch?v=zEUN238gd6Q&feature=youtu.be
Код из библиотеки b2.js
Вот соответствующий биткода из b2.js, где создаются соединения:
function b2Joint(type, bodyA, bodyB, props) {
var j;
if (type=='distance') {
// Create distance joint
} else if (type=='pulley') {
// Create pulley joint
} else if (type=='wheel') {
// Create wheel joint
} else if (type=='rope') {
j = new box2d.b2RopeJointDef();
// Connection between previous and this one
j.bodyA = bodyA.body;
j.bodyB = bodyB.body;
// Equilibrium length
j.maxLength = props.separation/b2scaleFactor;
if (props.xy != undefined) j.localAnchorA = b2scaleTo(props.xy);
} else if (type=='revolute') {
// Create revolute joint
} else if (type=='mouse') {
// Create mouse joint
}
j = b2world.CreateJoint(j);
bodyA.joints.push(j);
return bodyA.joints.length-1;
}