Почему объекты тел box2d проникают друг в друга, когда соединены соединением? - PullRequest
0 голосов
/ 02 февраля 2019

Фон

Я пытаюсь выяснить на высоком уровне, почему я получаю неожиданное поведение, используя 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;
}

1 Ответ

0 голосов
/ 04 февраля 2019
Тела

box2d, которые соединены соединениями, будут проникать друг в друга, когда их свойство сталкивается со связью равно false.Это настройка по умолчанию.

Если для свойства collide connected установлено значение true, должна быть включена обработка столкновений между подключенными телами, чтобы они больше не проникали друг в друга.

Учебное пособиена соединениях box2d, которые мне нравятся, и подробности об этом можно узнать по адресу: http://www.iforce2d.net/b2dtut/joints-overview.

...