1

所以我在我的世界里创造了两个物体,一个球和一个平面。由于重力,球落到表面上并与之碰撞。

我以为我在正确的轨道上使用EventsBody.isSensor()但我似乎无法从我的事件监听器那里得到哪些身体已经碰撞,即身体名称。

草图.js

var Engine = Matter.Engine,
    Render = Matter.Render,
    World = Matter.World,
    Bodies = Matter.Bodies,
    Events = Matter.Events;

var engine = Engine.create();

var render = Render.create({
    element: document.body,
    engine: engine
});

var surface = Bodies.rectangle(250, 250, 400, 100, { isStatic: true });

var ball = Bodies.circle(200, 0, 11, {
      density: 0.05,
      restitution: 0.7,
      inertia: Infinity
  });

 Events.on(engine, 'collisionStart', function(event) {
    console.log('collisionStart');
    var pairs = event.pairs;
    console.log(pairs);
  });

World.add(engine.world, [surface, ball]);
Engine.run(engine);
Render.run(render);

该事件被触发,但是对变量中没有任何内容。我究竟做错了什么?

同样,当我打开isSensor: true电源时,球似乎穿过了静止的物体。

JS 小提琴:https ://jsfiddle.net/qk3yLfyq/12/

4

1 回答 1

2

您走在正确的道路上并且正在获取事件对象并使用它,您只需要解析更多信息。试试这个,例如,更换

Events.on(engine, 'collisionStart', function(event) {
console.log('collisionStart');
var pairs = event.pairs;
console.log(pairs);
});

Events.on(engine, 'collisionStart', function(event) {
    event.pairs.forEach(function(obj){
      console.log('BodyA is static: ' + obj.bodyA.isStatic + '. BodyB is static: ' + obj.bodyB.isStatic)
    })
  });

在后一种情况下,我只是从该事件返回的对象中解析更多信息。

于 2017-07-19T19:34:23.413 回答