在MatterJS中移动约束时,应该如何固定向后角速度?

时间:2019-02-18 03:33:42

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

1 个答案:

答案 0 :(得分:0)

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

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

完整代码为here