【问题标题】:Box2D Collision Filtering with Simultaneous Collisions具有同时碰撞的 Box2D 碰撞过滤
【发布时间】:2012-11-19 00:04:56
【问题描述】:

我正在使用 Box2DWeb 2.1a,它是 Box2DFlash 的直接端口。

我通过设置类别和掩码位来使用联系人过滤器 (b2FilterData)。这部分有效,但有一些我没想到的令人讨厌的行为。当不应该碰撞的项目也与另一个他们应该碰撞的对象接触时,这些对象也会相互碰撞。我不想要这个,但不知道如何摆脱它。

我创建了一个带有 ShouldCollide 方法的 b2ContactFilter,它是 b2ContactFilter.prototype.ShouldCollide 方法的精确副本,以便在接触时打印出类别和掩码位的值。当错误的碰撞发生时,我注意到 filter1.categoryBits 和 filter1.maskBits 分别变成了 0x0001 和 0x65535。这就好像 b2FilterData 是一个新实例,或者 b2Body 已被分配一个新的 b2FixtureDef 实例。不过,我不知道为什么会这样。

【问题讨论】:

  • 你能分享整个代码吗??

标签: javascript filtering box2d collision


【解决方案1】:

您确定正确分配了 b2FilterData 吗?它应该应用于 b2Fixture 而不是 b2FixtureDef。如果你正在做:

var myData = new b2FilterData();
myData.maskBits = ~0x0004;

fixture.m_filter = myData;

试试吧:

fixture.SetFilterData(myData);

如果调用 SetFilterData 时出现错误,则表示您不是在 b2Fixture 上调用它,而是在 b2FixtureDef 上调用它,这是错误的。

这有帮助吗?

【讨论】:

  • 如何将物体放在不同的图层上,这样它们就不会相互碰撞,而是与地面发生碰撞?
  • @WorstForum 这是一个新问题。如果你问,我可以为你解答。
  • 我已经解决了——尽管完全缺乏 Box2D Web 的文档。然而,我正在拔头发,试图找出如何找到 2 个形状的 50% 变形,所以准确的平均值 - 使用角度/顶点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 2012-06-10
  • 2013-02-02
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多