Matter.js - 如何在碰撞后移除物体

5

我是Matter.js的新手,对于如何在碰撞后删除特定的物体非常困惑,以下是我的代码:

Matter.Events.on(engine, 'collisionEnd', function(event){
  var i, pair,
  length = event.pairs.length;
  for(i = 0; i<length; i++){
    pair = event.pairs[i];
    if(pair.bodyA === ball){
      continue;
    }
    else{
      World.remove(world, pair.bodyA);
    }
  }
});

我希望在球撞击方块后能够删除这些方块,但代码似乎无法实现。
3个回答

3

看一下这段代码,应该可以正常工作!

var e = Matter.Engine.create(document.body);
var a = Matter.Bodies.rectangle(400, 400, 100, 60);
var b = Matter.Bodies.rectangle(450, 100, 100, 60);

Matter.Events.on(e, 'collisionEnd', _ => {
    _.pairs.forEach(_ => {
        if(_.bodyA === a || _.bodyB === a)
            Matter.World.remove(e.world, a);
    });
});

Matter.World.add(e.world, [a, b]);
Matter.Engine.run(e);

顺便提一下,不要使用for循环。 使用foreach在matter.js中可以很好地工作。


但在我的情况下,正方形数量正在增加,这是我的所有代码:https://codepen.io/couplefire/pen/xPOjog?editors=0010 - user8108238

0

Matter.World现已弃用,您应该使用Matter.Composite

Matter.Events.on(engine, "collisionEnd", (event) => {
  event.pairs.forEach(({ bodyA, bodyB }) => {
    if (bodyA !== ball) {
      Matter.Composite.remove(engine.world, bodyA);
    }
    if (bodyB !== ball) {
      Matter.Composite.remove(engine.world, bodyB);
    } 
  });
});

0
Matter.Events.on(e, 'collisionEnd', ({ pairs }) => {
   pairs.forEach(({ bodyA, bodyB }) => {
     if (bodyA !== ball) Matter.World.remove(world, bodyA);
     if (bodyB !== ball) Matter.World.remove(world, bodyB);
  });
});

应该有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接