Box2d 过滤掩码,组类别

Box2d Filtering mask, group category

我有两个 body def,创建:Body A 和 Body B,以及 link 它们的 JOINT

我希望 A 体只有在 linked

时才能与 B 体发生碰撞

同时,一个Body B不能与另一个Body B,一个Body A 不能碰撞另一个 Body A.

a Body B 不能与未 linked 的 Body A 发生碰撞。

我可以分配什么掩码、类别和组?我迷路了我不明白。

可能有几种方法可以实现这一点,但我想到的一种是: 设置类别和过滤器,使 A 和 B 通常不会发生碰撞。

接下来,为每对对象赋予它自己唯一的组ID,并带有一个正整数。这将确保无论 A 和 B 的正常规则如何,组内的对象都会相互碰撞,而不同的组将使用正常规则(因此不会发生碰撞)

组对象的构造函数可以采用组 ID,然后

public JoinedObjects(int groupId){

    FixtureDef fdefa = new FixtureDef();
    fdefa.filter.categoryBits = 1;//category A
    fdefa.filter.maskBits = 0;//collide with nothing

    FixtureDef fdefb = new FixtureDef();
    fdefb.filter.categoryBits = 2;//category B
    fdefb.filter.maskBits = 0;//collide with nothing

    fdefa.filter.groupIndex = uniqueGroupId;//will collide with the rest of this group
    fdefb.filter.groupIndex = uniqueGroupId;//will collide with the rest of this group

    .....
}

然后通过

创建每个组
JoinedObjects firstGroup = new JoinedObjects(uniqueGroupId);
uniqueGroupId++;
JoinedObjects secondGroup = new JoinedObjects(uniqueGroupId);
uniqueGroupId++;