box2d 碰撞過濾

2021-06-22 09:03:35 字數 1923 閱讀 3835

原帖:

碰撞篩選就是乙個防止某些形狀發生碰撞的系統。按照具體需求設定哪些物體跟那些物體發生碰撞,跟哪些物體不發生碰撞。

box2d通過種群跟組索引支援碰撞篩選。

組索引比較簡單,設定其shapedef的groupindex值即可,例如boxdef.filter.groupindex = 1。

通過groupindex值的正負來確定同乙個組的所有形狀總是發生碰撞(正)或永遠不發生碰撞(負),需要特別注意的是兩個不同的付索引是依然會發生碰撞的,例如乙個圓的groupindex值為-1,乙個矩形groupindex值為-2。因為不同組索引之間是按照種群跟掩碼來篩選的,也就是講,組索引是有著更高的優選權的。

box2d支援16個種群,因此我們可以指定任何乙個形狀屬於哪個種群,同時也可以指定這一形狀和哪些其它的種**生碰撞。這一過程就是通過設定其shapedef的categorybits值與maskbits值完成的。

categorybits用於定義自己所屬的碰撞種類,maskbits則是指定碰撞種類。

舉個例子講,如果body1的boxdef.filter.categorybits = 0x0002,body2的boxdef.filter.categorybits = 0x0004,則如果另外乙個body想與他們兩個都發生碰撞,則其boxdef.filter.maskbits = 0x0006;簡單講,乙個body要與其它種群的body發生碰撞,則其maskbits值應該為其它種群的body的categorybits之和。

但是同時也不是那麼簡單,如果三個body的categorybits分別為0x0001,0x0002,0x0003,那另外乙個body的 maskbits值如果是0x0003的話,那它是跟categorybits值為0x0001和0x0002的兩個body碰撞呢,還是單獨只跟 categorybits值0x0003的body發生碰撞呢,亦或是跟三個body都發生碰撞呢?

乙個遊戲中的種群一般有多少種呢?

現在我們就做乙個測試,具體要求:四個剛體。

矩形:只跟自身,圓形,三角形發生碰撞。

圓形:只跟自身,矩形,五邊形發生碰撞。

三角形:只跟自身,矩形發生碰撞。

五邊形:只跟自身,圓形碰撞。

categorybits值:矩形[0x0001],圓形[0x0002],三角形[0x0003],五邊形[0x0004]。

maskbits值:矩形[1+2+3=6=0x0006]

圓形[1+2+4=7=0x0007]

三角形[1+3=4=0x0004]

五邊形[2+4=6=0x0006]

這個碰撞具體會怎樣呢?矩形跟五邊形竟然一樣!6跟7少說也有兩種組合方法,還是直接看demo好了。

結果:矩形:只跟圓形發生碰撞。6跟2有什麼關係?

圓形:只跟自身,矩形,五邊形發生碰撞。符合要求。贊乙個!

三角形:只跟五邊形發生碰撞。4跟4,是不是單一比組合優先?

五邊形:只跟自身,圓形,三角形發生碰撞。6 = 2+3+4??我勒個去!

還是先看看正確的把!

一切一切的錯誤就是categorybits值有些取值是違規的,categorybits值是必須為2的倍數的。

即有如下的16個種群:

0x0000 = 0

0x0001 = 1

0x0002 = 2

0x0004 = 4

0x0008 = 8

0x0010 = 16

0x0020 = 32

0x0040 = 64

0x0080 = 128

0x0100 = 256

0x0200 = 512

0x0400 = 1024

0x0800 = 2048

0x1000 = 4096

0x2000 = 8192

0x4000 = 16384

0x8000 = 32768

這樣子,6就只能跟2+4配對,8就只能跟8自己配對。

box2d 剛體碰撞設定方法

box2d 剛體碰撞設定方法 fixturedef.filter.categorybits指自己所屬的碰撞種類,fixturedef.filter.maskbits指與其碰撞的種類 b2fixturedef fixturedef 注意 fixturedef.filter.categorybits 的...

Box2D學習筆記

box2d是乙個用於遊戲的2d剛體 庫,程式設計師可以在他們的遊戲裡使用他們,也可以是的自己的物體運動的更可信。讓他看起來更加接近現實。物理引擎是乙個程式性的動畫系統。而不是由動畫師去移動物體。這一切都是建立在牛頓力學的基礎之上。box2d最初是用c 來寫的,之後有被多種語言所實現。box2d中的核...

BOX2d繪製曲線

來自天地會的 wkyjoey同學 問道如何做乙個重力大師遊戲 如下圖 這裡要特意表示一下歉意,最近一直忙於工作,沒有及時更新教程。對於重力大師遊戲 試玩之後,不難發現,我們在執行時可以建立的剛體有兩種,線條剛體和多邊形剛體。今天我們來一起研究一下線條剛體的建立。多邊形剛體會在下次教程中討論。這裡我們...