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