具有同时碰撞的Box2D碰撞滤波

时间:2012-01-12 22:35:48

标签: javascript filtering box2d collision

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

我通过设置类别和掩码位来使用接触过滤器(b2FilterData)。这部分起作用,但有一些我没想到的刺激性行为。当不应该碰撞的物品也与另一个物体接触时,它们应该碰撞,这些物体也会相互碰撞。我不想要这个,但却找不到如何摆脱它。

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

1 个答案:

答案 0 :(得分:0)

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

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

fixture.m_filter = myData;

尝试改为:

fixture.SetFilterData(myData);

如果你在调用SetFilterData时遇到错误,这意味着你没有在b2Fixture上调用它,而是在b2FixtureDef上调用它,这是错误的。

有没有帮助?