为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿晨1998 2023-11-11 21:50:43
我正在构建一个简单的模拟,我需要超过 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: 1collidesWith: [0]group: 3mask: 4294967295__proto__: Object}{category: 1, mask: 4294967295, group: 1}category: 1group: 1mask: 4294967295__proto__: Object}第二个对象似乎是该console.log()功能的延续(因为它在打印后继续记录)编辑: 我发现这filterA是相反的,首先它打印:{category: 1, mask: 4294967295, group: 1}category: 1group: 1mask: 4294967295__proto__: Object}{category: 1, mask: 4294967295, group: 2, collidesWith: Array(1)}category: 1collidesWith: [0]group: 2mask: 4294967295__proto__: Object}filterA注意:当我初始化碰撞体时,碰撞过滤器选项与分别出现 ( ) 和消失 ( filterB)的值相同我的代码其他地方有错误吗?或者这是我忽略的其他 Matter.js 功能?
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

很抱歉没有早点更新这个线程,虽然我还没有发现这个错误,但我意识到这对于我的特定模拟来说不是最好的方法,而是创建了一个更好的系统,而无需检查这些未定义的变量。相反,我创建了一个名为 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;

    }

}  


查看完整回答
反对 回复 2023-11-11
  • 1 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信