2016-11-13 9 views
0

Как бы один идти о добавлении программно срабатывает сенсорный/события мыши в Matter.js? У меня есть несколько событий столкновения, настроенных для движка, но не могу вызвать событие mouseup, которое останавливает текущее действие перетаскивания. Я пробовал различные комбинации таргетинга на элемент canvas, mouse/mouseConstraint и нестатический объект.Инициирующие мышь/сенсорные события в Matter.js

ответ

0

Оказывается, я неправильно настроен модуль Matter.Mouse, и переназначения ввод мыши, который уже установлен в MouseConstraint. Следующие работы в отношении к моему первоначальному вопросу:

Matter.mouseConstraint.mouse.mouseup(event); 
0

Если вы, как и я, пришли сюда, пытаясь выяснить, как быть в состоянии нажать на объекте тела 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' 
    }); 

Надеюсь, что это поможет! Этот меня заставил меня повесить на целый день.

Смежные вопросы