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++;
我有两个 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++;