WeldJoint вызывает неправильное вращение объекта и прыжок в планке. js (box2d) - PullRequest
0 голосов
/ 10 апреля 2020

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

Я разрешаю пользователю перемещать ящики, устанавливая вилы для вилочного погрузчика (приспособление, установленное как датчик) под ящиком и создание WeldJoint, когда пользователь нажимает клавишу пробела.

Проблема в том, что как только сварка создается, центр вращения перемещается (я не могу определить контрольную точку) и поворот вилочного погрузчика иногда прыгает, и я не могу понять, почему

Полный исходный код того, что я получил, находится здесь - https://codepen.io/MichaelDilloway/pen/zYvxowJ?editors=0010

Но в частности, здесь происходит сварка -

document.addEventListener('keyup', oEvent => {
    switch(oEvent.code) {

        case 'Space':
            oForklift.forkIsUp = !oForklift.forkIsUp;
            console.log('oForklift.forkIsUp: ' + oForklift.forkIsUp);

            if(oForklift.forkIsUp) {
                const oContactList = oForklift.body.getContactList();
                if(oContactList) {
                    oForklift.crateWeld = planck.WeldJoint({}, oForklift.body, oContactList.other, oForklift.body.getPosition());
                    oWorld.createJoint(oForklift.crateWeld);
                }
            }

            if(!oForklift.forkIsUp && oForklift instanceof planck.WeldJoint) {
                oWorld.destroyJoint(oForklift);
            }
            break;

    }
});

Пример "прыжка" ... https://gfycat.com/greatblissfulleveret

...