javascript - 为什么使用碰撞过滤器删除所有碰撞?
问题描述
我有 4 个身体:2 个球和 2 个平台。
我希望球能够重叠(没有碰撞),但仍然与两个平台发生碰撞。我已经阅读了官方的Matter.js 文档并使用了collisionFilter
演示,但仍然无法掌握实现我需要的东西。
let defaultCollision = 0x0001;
let ballCollision = 0x0002;
let holderCollision = 0x0004;
let floorCollision = 0x0008;
ball1 = Bodies.circle(...
collisionFiler: { mask: ballCollision }
...
});
ball2 = Bodies.circle(...
collisionFiler: { mask: ballCollision }
...
});
// ^ these balls don't collide, which is good.
platform1 = Bodies.circle(...
collisionFiler: { mask: holderCollision }
...
});
platform2 = Bodies.circle(...
collisionFiler: { mask: floorCollision }
...
});
// I don't understand why the balls pass right through these platforms...
任何帮助将不胜感激。
解决方案
好吧,我想出了一个解决方案!
在 Matter.js 演示中,我一直忽略 和 之间的collisionFilter: { mask: defaultCategory | redCategory }
不同collisionFilter: { category: defaultCategory | redCategory }
。不同之处在于mask
和category
规则。
要实现球重叠但与平台碰撞的结果:
let defaultCollisionCategory = 0x0001;
let ballCollisionCategory = 0x0002;
ball1 = Bodies.circle(...
collisionFiler: { category: ballCollisionCategory }
...
});
ball2 = Bodies.circle(...
collisionFiler: { mask: defaultCollisionCategory }
...
});
// You do not need to set either the collisionFiler mask or category, and the balls will collide with them
希望这可以帮助!
推荐阅读
- python - 自动方法扩展?
- java - Elasticsearch 存储库分页未返回正确的页面大小且未对数据进行排序
- scala - 如何处理 Spark 中找不到密钥的错误?
- javascript - 显示失败测试中预期和接收的全部输出
- discord - 在频道 Discord.js 中查找最后一个附件
- debian - 当 Tor 连接在 Tails 上处于活动状态时,显示会出现故障
- spring-boot - 春季启动仇恨的Kotlin递归问题
- javascript - 为什么我的页面在发表评论后没有重新加载视图?
- python - json.decoder.JSONDecodeError:预期值:python3 中的第 1 行第 1 列(字符 0)
- mongodb - 如何在猫鼬模式中存储范围(以地理圆半径形式)