如何在 matter.js 中启用碰撞?

How to enable collisions in matter.js?

我正在 matter.js p5.js 上试用。 我正在尝试制作一个简单的自上而下模拟,其中身体在尝试移动时相互碰撞。

这是我的代码:

let engine,world;

function setup() {
  createCanvas(400, 400);
  engine = Matter.Engine.create();
  world = engine.world;

  m1 = Matter.Bodies.rectangle(50,50,50,50);
  m2 = Matter.Bodies.rectangle(100,50,50,50);
  Matter.World.add(world,m1);
  Matter.World.add(world,m2);
}

function draw() {
  background(220);

  Matter.Body.translate(m1,{x: 1,y: 0});
  pos1 = m1.position;
  pos2 = m2.position;
  rectMode(CENTER);
  rect(pos1.x,pos1.y,50,50);
  rect(pos2.x,pos2.y,50,50);
}

我的意图是让 body m1 在试图朝他的方向移动时推动 body m2。不幸的是,m1 正通过 m2。我如何让它们发生碰撞? 我已经看到我可以为 body 的选项增加刚度,但我认为如果它们一开始就没有发生碰撞,那对我没有帮助。

我刚发现问题:翻译函数永远不会检查碰撞。相反,我使用了 setVelocity 函数并每帧更新引擎。

Matter.Engine.update(engine);
Matter.Body.setVelocity(m1,v1);

我还必须在设置中关闭重力。

engine.world.gravity.y = 0;