2

我正在使用MatterJS为画布上的一些对象设置动画。在动画的某一时刻,我的两个对象之间发生了碰撞。我使用以下代码成功检测到事件:

Events.on(engine, 'collisionStart', function(event) {

    console.log(event)

});

我要确定的是哪两个物体正在碰撞。当我 console.log event.pairs 我得到一个空数组。我原以为它会返回一个由两个正在碰撞的对象组成的数组。我哪里出错了?

4

3 回答 3

5

你真的没有错误。您必须在零位上看到您的配对,库 matterjs 在从事件主打印此值时遇到问题。您必须部署您的响应,并且您将能够看到您的配对,因此:

Events.on(engine, 'collisionStart', function(event) {
     console.log("Evento: ", event)
     var pairs = event.pairs;
     console.log("Pair no visible: ", pairs)
     console.log("Pair visible: ", pairs[0]);
     console.log("colision between " + pairs[0].bodyA.label + " - " + pairs[0].bodyB.label);
});

在这里,我展示了一个简单的例子。

于 2017-09-07T08:48:37.420 回答
1

为了成功处理 Matter js 中的冲突,请尝试从事件对象访问每对返回的数组。

Events.on(engine, 'collisionStart', (event) => {
  event.pairs.forEach((collision) => {
    console.log(collision);
  });
});

在此处输入图像描述

于 2020-06-14T12:59:12.143 回答
1

作为 Cristian Agudelo 的补充答案,您需要复制对的状态,然后执行您想要的操作:

Matter.Events.on(engine, "collisionStart", function(e)
{
    var pairs = e.pairs.slice(); // copy
    ...
}
于 2019-05-24T15:30:19.830 回答