Как мне зафиксировать обратную угловую скорость при перемещении ограничения в MatterJS? - PullRequest
0 голосов
/ 18 февраля 2019

Я создаю ограничение между телом и точкой:

var tempConstraint = Constraint.create({pointA: {x: 50, y: 50}, bodyB: body, pointB: {x: x, y: y}, stiffness: 0.1, length: 0, damping: 0.5, });

Точка также перемещается:

tempConstraint.pointA = {x: newX, y: newY};

Проблема в том, что если pointAмедленно перемещается слева направо, например, тело его перетаскивания перемещается в направлении, противоположном тому, каким оно должно быть.Например, если вы повесите карандаш за самый наконечник и начнете перемещать наконечник вправо, нижняя часть карандаша должна слегка повисать слева от верха при его перемещении.Однако, если бы я сделал именно эту вещь с приведенным выше кодом, нижняя часть карандаша переместилась бы вправо, точно так же, как если бы верхняя часть была потянута влево.Не уверен, что я делаю не так, но моя единственная мысль - изменить pointA - это плохая идея, но я не могу придумать лучшего способа переместить точку ограничения.Будет ли создание столкновения отключено, статическое тело и прикрепление его к нему, а затем перемещение тела будет лучшим способом для этого?

1 Ответ

0 голосов
/ 07 апреля 2019

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

var vw = window.innerWidth/100;
var vh = window.innerHeight/100;
var body = Bodies.rectangle(vw*50, vh*50, vw*3, vw*15, {
    frictionAir: 0.02,
    friction: 1,
    render: {
        fillStyle: "#FCED08"
    }
});
var tempConstraint = Constraint.create({pointA: {x: vw*50, y: vh*50}, bodyB: body, pointB: {x:0,y:vw*7.5}, stiffness: 0.8, damping: 0.5, render: {type: "spring"}});
World.add(world, [body, tempConstraint]);

Полный код здесь

...