首页 > 解决方案 > 在 MatterJS 中移动约束时,我应该如何修复向后角速度?

问题描述

我在一个身体和一个点之间创建一个约束:

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是一个坏主意,但我真的想不出更好的方法来移动约束点。创建一个禁用碰撞的静态物体并将其附加到该物体上,然后移动该物体是解决此问题的更好方法吗?

标签: javascriptmatter.js

解决方案


尽管我使用的是弹簧约束,但它对我来说很好用。我还删除了约束中的长度属性,因此长度是自动生成的:

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]);

完整代码在这里


推荐阅读