【问题标题】:Matter.js Collision Filter Options Disappear and Reappear?Matter.js 碰撞过滤器选项消失和重新出现?
【发布时间】:2021-03-21 21:49:01
【问题描述】:

我正在构建一个简单的模拟, 我需要的不仅仅是 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 功能?

【问题讨论】:

  • 欢迎来到 SO!你能显示一个minimal reproducible example,最好是一个stack snippet,我可以跑去看问题吗?谢谢。
  • 我认为存在一些小错误,因为有很多代码需要通过才能获得可以调试的示例,所以我发布了一个答案以表明我已修复它。对不起,如果这篇文章变得无关,无论如何。
  • 没关系——感谢self-answer

标签: javascript undefined simulation physics matter.js


【解决方案1】:

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

【讨论】:

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