如何解决我如何更改对象的碰撞过滤器,使其不再与MouseConstraintMatterJS交互
我正在研究Slingshot演示。问题在于,在烧开岩石后,仍然可以单击并拖动它,而我要禁用它。
var rockOptions = {
density: 0.004,restitution: 0.75,collisionFilter: { mask: SOLID,category: NEXTBALL }
};
和鼠标约束:
var mouse = Mouse.create(render.canvas),mouseConstraint = MouseConstraint.create(engine,{
mouse: mouse,collisionFilter: { category: NEXTBALL },constraint: {
stiffness: 0.2,render: {
visible: true
}
}
});
然后在click事件中,我尝试更改该过滤器,因此它不应再与鼠标类别匹配:
Events.on(engine,"afterUpdate",function () {
if (
mouseConstraint.mouse.button === -1 &&
(rock.position.x > shootPosition.x + 20 ||
rock.position.y < shootPosition.y - 20)
) {
Composite.remove(engine.world,elastic);
rock.collisionFilter = {category: SOLID,mask: SOLID};
}
});
但是它仍然是可拖动的。我猜测问题出在我如何改变岩石上的过滤器,但是我在文档中没有看到任何建议来更改它的方法。
我不认为这是因为我已经设置了类别,但是在这里它们只是为了以防万一(实心图像和实物图像确实起作用,球不会与实物图像碰撞:
const SOLID = 0x0001;
const IMAGE = 0x0002;
const NEXTBALL = 0x0003;
帮我使岩石不再可点击
解决方法
经过大量的重新设计,调整和检查不同的演示之后,终于找到了答案。
首先,类别的位掩码必须为2的幂,因此NEXTBALL
必须为0x0004
而不是0x0003
。
接下来,您不能在已建立的主体上设置整个collisionFilter
对象,否则它将破坏碰撞。相反,您必须使用rock.collisionFilter.category = NEXTBALL
;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。