触发Matter.js中的鼠标/触摸事件

时间:2016-11-13 02:59:55

标签: matter.js

如何在Matter.js中添加以编程方式触发的触摸/鼠标事件?我为引擎设置了一些碰撞事件,但无法触发停止当前拖动操作的mouseup事件。我尝试过针对canvas元素,mouse / mouseConstraint和非静态体的各种组合。

2 个答案:

答案 0 :(得分:0)

事实证明我错误地配置了Matter.Mouse模块,并且重新分配了已经在MouseConstraint中设置的鼠标输入。以下是关于我原来的问题:

Matter.mouseConstraint.mouse.mouseup(event);

答案 1 :(得分: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)&&(mouseY1 == mouseY2))时完成的。

第二个 - 多汁的部分 - 创建一个var数组来保存对象或“body”,我们将在鼠标下挖掘。谢天谢地,有这个功能:

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

希望有所帮助!这个让我挂了一整天。