JavaScript/Matter.js:具有多个约束的对象刚刚启动

JavaScript/Matter.js:具有多个约束的对象刚刚启动,javascript,physics-engine,matter.js,Javascript,Physics Engine,Matter.js,我试图构建一个小“汽车”来熟悉Matter.js API。我差点就成功了,突然发生了奇怪的事。我有一个主体,每个主体与两个轮子相连。但一旦汽车到达地面,后轴就会缓慢地离开地面。 这是一个bug,我如何解决这个问题? 代码: 感谢您满怀希望地给出答案。有一个已知的问题,某些约束设置无法很好地解决,看起来就是这样,请参见此处: 下面是一个简单汽车的例子: 但是请注意,由于尚未实现旋转约束,因此它们仍然会有点不稳定,除非您将轴约束设置得非常宽松 start() function start() {

我试图构建一个小“汽车”来熟悉Matter.js API。我差点就成功了,突然发生了奇怪的事。我有一个主体,每个主体与两个轮子相连。但一旦汽车到达地面,后轴就会缓慢地离开地面。 这是一个bug,我如何解决这个问题? 代码:


感谢您满怀希望地给出答案。

有一个已知的问题,某些约束设置无法很好地解决,看起来就是这样,请参见此处:

下面是一个简单汽车的例子:

但是请注意,由于尚未实现旋转约束,因此它们仍然会有点不稳定,除非您将轴约束设置得非常宽松

start()
function start() {
    var Engine = Matter.Engine,
        World = Matter.World,
        Bodies = Matter.Bodies;
        Constraint = Matter.Constraint;
        Render = Matter.Render;

    var engine = Engine.create(document.body);
    var body = Bodies.rectangle(200, 20, 200, 40);
    body.density = 15;
    var wheelA = Bodies.circle(50,100,40);
    var wheelB = Bodies.circle(350,100,40);
    wheelA.density = 10;
    wheelB.density = 10;
    var axisAA = Constraint.create({bodyB:wheelA,bodyA:body,pointA:{x:-90,y:-15},pointB:{x:0,y:0},stiffness:0.8}, { isStatic: true });
    var axisAB = Constraint.create({bodyB:wheelA,bodyA:body,pointA:{x:-10,y:15},pointB:{x:0,y:0},stiffness:0.2});
    var axisBA = Constraint.create({bodyB:wheelB,bodyA:body,pointA:{x:90,y:-15},pointB:{x:0,y:0},stiffness:0.8});
    var axisBB = Constraint.create({bodyB:wheelB,bodyA:body,pointA:{x:10,y:15},pointB:{x:0,y:0},stiffness:0.2});
    var ground = Bodies.rectangle(400, 610, 810, 60, { isStatic: true });

    World.add(engine.world, [body, wheelA, wheelB, axisAA, axisAB, axisBA, axisBB, ground]);

    document.addEventListener('keydown', function(event) {
    if(event.keyCode == 39) {
        Matter.Body.setAngularVelocity(wheelA,0.1);
        Matter.Body.setAngularVelocity(wheelB,0.1);
    }
    else if(event.keyCode == 37) {
        Matter.Body.setAngularVelocity(wheelA,-0.1);
        Matter.Body.setAngularVelocity(wheelB,-0.1);
    }
    });
    Engine.run(engine);
}