box2d b2Filter 碰撞过滤

来源:互联网 发布:淘宝达人直播怎么开通 编辑:程序博客网 时间:2024/06/04 12:21

{

-分组索引(groupIndex)

-类别标志位(categoryBits) 

-遮罩标志位(maskBits) 

}

网上也有写的一些文章,说的有点不太详细,本人推荐下面的这个链接可以看看这个,写的不错,英文好的话,尽量看原版

http://www.ohcoder.com/blog/2012/11/30/collision-filtering/ 



{//分组索引 (groupIndex)
分组索引 碰撞优先级  默认值 0 

1: 同组正数可以碰撞(正正 (1,1))  不考虑(categoryBits 和 maskBits)
2: 同组负数不可以碰撞( 负负 (-1,-1))  不考虑(categoryBits 和 maskBits)
3: 碰撞的优先级(正正碰撞(1,3) 正负碰撞 (1,-1),负负碰撞 (-1,-3))考虑 (categoryBits 和 maskBits)
}


{//类别标志位(categoryBits) 16种
每一个标志位是一个16位的二进制整数,因此你可以设置16种不同的碰撞类型
其实还是有很大灵活度的,因为可以组合这些标志位,以此可以决定两个定制器之间是否会发生碰撞。
带有分组索引标志位的定制器,可以覆盖带有类别/遮罩标志位的定制器集合。

  
0000000000000001 //1
0000000000000010 //2
0000000000000100 //4
0000000000001000 //8
0000000000010000 //16
0000000000100000 //32
0000000001000000 //64
0000000010000000 //128
0000000100000000 //256
0000001000000000 //512
0000010000000000 //1024
0000100000000000 //2048
0001000000000000 //4096
0010000000000000 //8192
0100000000000000 //16384
1000000000000000 //32768
}


{//掩码标志位(maskBits) 
1: 0 不碰撞,0xFFFF完全碰撞  默认值 0xFFFF
2: 不同的定制器之间的碰撞过滤限制
例1 两个定时器碰撞   A碰B
0000000000000001 //1  刚体A categoryBits 类别标志位
0000000000000010 //2  刚体B categoryBits 类别标志位
它们碰撞的话
maskBits 必须写成 (0000000000000001)|(0000000000000010)== (0000000000000011)   占位符体现的价值就在这里
注意的是,碰撞与碰撞之间必须是相对的,你碰我,我也必须能碰你


例2 三个定时器碰撞  A碰B A碰C  B不能碰C
0000000000000001 //1  刚体A categoryBits 类别标志位
0000000000000010 //2  刚体B categoryBits 类别标志位
0000000000000100 //4  刚体C categoryBits 类别标志位
它们碰撞的话
A maskBits 必须写成 (0000000000000001)|(0000000000000010)|(0000000000000100)  == (0000000000000111)  占位符体现的价值就在这里
B maskBits 必须写成 (0000000000000001)|(000000000000010)    == (0000000000000011) 占位符体现的价值就在这里
B maskBits 必须写成 (0000000000000100)|(000000000000001)     == (0000000000000101)占位符体现的价值就在这里


注意的是,碰撞与碰撞之间必须是相对的,你碰我,我也必须能碰你

}



0 0