Matter JS - массив event.pairs пуст при столкновении

Я использую MatterJS для анимации некоторых объектов на холсте. В одном месте анимации происходит столкновение двух моих объектов. Я успешно обнаружил событие с кодом ниже:

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

    console.log(event)

});

Я пытаюсь определить, какие два объекта сталкиваются. Когда я console.log event.pairs я получаю пустой массив. Я бы подумал, что он вернул бы массив двух объектов, которые сталкиваются. Где я ошибся?

1 ответ

У вас действительно нет ошибок. Вы должны увидеть свою пару на нулевой позиции, в библиотеке материи есть проблема с выводом этого значения из события main. Вы должны развернуть свой ответ, и вы сможете увидеть свои пары, поэтому:

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

Здесь я показываю простой пример.

Дополняя ответ Кристиана Агудело, вам нужно скопировать состояние пар и затем делать то, что вы хотите:

Matter.Events.on(engine, "collisionStart", function(e)
{
    var pairs = e.pairs.slice(); // copy
    ...
}

Чтобы успешно работать с коллизиями в Matter js, попробуйте получить доступ к каждой паре возвращаемого массива из объекта события.

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

Другие вопросы по тегам