【问题标题】:JavaScript, Matter.js: Disable collision for one bodyJavaScript,Matter.js:禁用一个身体的碰撞
【发布时间】:2015-09-20 20:13:35
【问题描述】:

正如标题中已经提到的,我正在寻找一种方法来禁用 Matter.js 中的每一次身体碰撞。它应该仍然可以与约束链接,并且应该有可能在一段时间后再次启用碰撞。有没有办法做到这一点?它的难点在于该对象不应该与任何其他对象发生碰撞,但所有其他对象都应该相互碰撞。

【问题讨论】:

    标签: javascript matter.js


    【解决方案1】:

    您可以使用碰撞过滤器,如下所示:

    const body = Matter.Bodies.rectangle(100, 100, 50, 50);
    // turns off collisions
    body.collisionFilter = {
      'group': -1,
      'category': 2,
      'mask': 0,
    };
    

    来自文档:

    如果两个物体有相同的非零值collisionFilter.group,如果值为正,它们总是会碰撞,如果值为负,它们永远不会碰撞。

    使用类别/掩码规则,如果两个主体 AB 在其掩码中包含对方的类别,即(categoryA & maskB) !== 0(categoryB & maskA) !== 0 都为真),则会发生碰撞。

    【讨论】:

    • 只是一个快速优化:"'mask': 0" 后面的最后一个逗号是不需要的
    • @Yaume 我认为对象定义中的尾随逗号没有问题。有些语言 (Go) 甚至 需要 它。它使添加新对和更改对的顺序变得容易,而不会出现语法(或更糟糕的是,逻辑)错误。从性能的角度来看,这肯定不是优化(或可读性,就此而言)......
    【解决方案2】:

    Matter.IBodyDefinition.isSensor
    

    为了禁用 Body 的物理碰撞。 Body 仍然可以用作碰撞传感器。

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多