2012-01-12 71 views
0

我正在使用Box2DWeb 2.1a,它是Box2DFlash的直接端口。Box2D Collision Filtering with Simultaneous Collisions

我使用接觸式過濾器(b2FilterData)通過設置類別和屏蔽位。這部分工作,但有一些令人不愉快的行爲,我沒有想到。當不應該碰撞的物品也與另一個應該碰撞的物體接觸時,這些物體也會相互碰撞。我不想要這個,但不知道如何擺脫它。

我使用ShouldCollide方法創建了一個b2ContactFilter,該方法是b2ContactFilter.prototype.ShouldCollide方法的精確副本,以便在聯繫時打印出類別和掩碼位的值。當發生錯誤的衝突時,我發現filter1.categoryBits和filter1.maskBits分別變爲0x0001和0x65535。這就好像b2FilterData是一個新實例,或者b2Body已經被分配了一個新的b2FixtureDef實例。不過,我不知道爲什麼會發生這種情況。

+0

你能分享整個代碼嗎? – Shekhar 2012-06-03 10:50:54

回答

0

您確定您正確分配了b2FilterData嗎?它應該應用於b2Fixture而不是b2FixtureDef。如果你正在做的:

var myData = new b2FilterData(); 
myData.maskBits = ~0x0004; 

fixture.m_filter = myData; 

嘗試,而不是:

fixture.SetFilterData(myData); 

如果你得到一個錯誤調用SetFilterData這意味着你不能調用它的b2Fixture但對b2FixtureDef代替,這是不對的。

這有幫助嗎?

+0

如何將物體放置在不同的圖層上,使它們不會與海誓山盟碰撞,而是與地面相撞? – 2016-09-28 20:02:08

+0

@WorstForum這是一個新問題。如果你問它,我可以爲你解答。 – 2016-09-29 08:12:50

+0

儘管Box2D Web完全缺乏文檔,但我已經完成了它。 但是,我正在試圖找出如何找到2個形狀的50%變形,所以確切的平均值 - 使用角度/頂點。 – 2016-09-29 13:49:18