box2d b2Filter 碰撞過濾

{

-分組索引(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)佔位符體現的價值就在這裏


注意的是,碰撞與碰撞之間必須是相對的,你碰我,我也必須能碰你

}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章