Как бы один идти о добавлении программно срабатывает сенсорный/события мыши в Matter.js? У меня есть несколько событий столкновения, настроенных для движка, но не могу вызвать событие mouseup, которое останавливает текущее действие перетаскивания. Я пробовал различные комбинации таргетинга на элемент canvas, mouse/mouseConstraint и нестатический объект.Инициирующие мышь/сенсорные события в Matter.js
ответ
Оказывается, я неправильно настроен модуль Matter.Mouse, и переназначения ввод мыши, который уже установлен в MouseConstraint. Следующие работы в отношении к моему первоначальному вопросу:
Matter.mouseConstraint.mouse.mouseup(event);
Если вы, как и я, пришли сюда, пытаясь выяснить, как быть в состоянии нажать на объекте тела Matter.js, позвольте мне дать вам один путь. Моя цель в моем проекте состояла в том, чтобы назначить некоторые атрибуты моим объектам прямоугольника и вызвать функцию, когда они были нажаты.
Первое, что нужно сделать, чтобы различать перетаскивание и щелчок, так что я написал (используя Jquery):
$("body").on("mousedown", function(e){
mouseX1 = e.pageX;
mouseY1 = e.pageY;
});
$("body").on("mouseup", function(e){
mouseX2 = e.pageX;
mouseY2 = e.pageY;
if((mouseX1 == mouseX2) && (mouseY1 == mouseY2)){
//alert("click!\n" + mouseX2 + " " + mouseY2 +"\n");
var bodiesUnder = Matter.Query.point(books, { x: mouseX2, y: mouseY2 });
//alert("click!\n" + mouseX2 + " " + mouseY2 +"\n");
if (bodiesUnder.length > 0) {
var bodyToClick = bodiesUnder[0];
alert(bodyToClick.title2);
}
}
});
Это было достигнуто при прослушивании для «MouseUp» и с просьбой, если ((mouseX1 == mouseX2) & & (мышьY1 == мышьY2)).
второго сочных совместителей создать массив уага для хранения объектов, или «тел», мы будем копать под мышкой. К счастью, есть эта функция:
var bodiesUnder = Matter.Query.point(books, { x: mouseX2, y: mouseY2 });
Для первого элемента здесь я ввел «книги». Для вас это должно быть имя массива, в который вы положили все свои объекты или «тела». Если вы не имеете их в массиве, это не трудно, чтобы бросить их в, например, так:
var books = [book1, book2, book3];
Как только это было сделано, я был в состоянии предупредить (book1.title2), чтобы увидеть, что название этой книги (тела) есть. Мои тела были закодированы следующим образом:
var book2 = Bodies.rectangle(390, 200, 66, 70, {
render : {
sprite : {
texture: "img/tradingIcon.jpg"
}
},
restitution : 0.3,
title1 : 'Vanessa and Terry',
title2 : 'Trading'
});
Надеюсь, что это поможет! Этот меня заставил меня повесить на целый день.