Matter.js 碰撞过滤器选项消失又重新出现?

Matter.js Collision Filter Options Disappear and Reappear?

我正在构建一个简单的模拟, 我需要的不仅仅是 32 个类别, 所以我实施了建议的解决方案来定义一个 Detector.canCollide 函数来允许我这样做。

Detector.canCollide = function (filterA, filterB) {
    console.log(filterB)
    return (filterB["collidesWith"].includes(filterA["group"]) || filterB["group"] == 0) 
        && (filterA["collidesWith"].includes(filterB["group"]) || filterA["group"] == 0);
}  

上面给出了错误:filterB["collidesWith"] 未定义。 进一步检查后,我使用 console.log() 语句找出这个对象 (filterB) 发生了什么,它返回了这个:

{category: 1, mask: 4294967295, group: 3, collidesWith: Array(1)}
category: 1
collidesWith: [0]
group: 3
mask: 4294967295
__proto__: Object}

{category: 1, mask: 4294967295, group: 1}
category: 1
group: 1
mask: 4294967295
__proto__: Object}

第二个对象似乎是 console.log() 函数的延续(因为它在打印后继续记录)

编辑: 我发现 filterA 是相反的, 首先打印:

{category: 1, mask: 4294967295, group: 1}
category: 1
group: 1
mask: 4294967295
__proto__: Object}

{category: 1, mask: 4294967295, group: 2, collidesWith: Array(1)}
category: 1
collidesWith: [0]
group: 2
mask: 4294967295
__proto__: Object}

注意:当我初始化碰撞体时,碰撞过滤器选项分别与出现(filterA)和消失(filterB)的值相同

我的代码中是否存在其他错误?还是我忽略了其他 Matter.js 功能?

抱歉没有早点更新这个帖子, 虽然我还没有发现错误, 我意识到这不是我的特定模拟的最佳方法,而是创建了一个更好的系统而无需检查这些未定义的变量。 相反,我创建了一个名为 layer 的碰撞过滤器,并将每个单独的代理分配给不同的层,可以与 layer: 0 上的所有东西发生碰撞的东西,在 layer: -1 上没有任何东西发生碰撞的东西,并使用了以下内容代码来实现这一点。我把这个 collisionFilter.layer 属性 给了我模拟中的每个对象。

Detector.canCollide = function (filterA, filterB) {
    if (filterA.layer != -1 && filterB.layer != -1){
        return (filterA.layer == filterB.layer || (filterA.layer == 0 || filterB.layer==0));
    } else {
        return false;
    }
}