2012-06-16 191 views
12

如何檢測身體是否碰撞其他身體,但不會對此碰撞做出反應。如何檢測碰撞,但不會在box2d中碰撞?

通過默認我 - 檢測碰撞和車身碰撞。

如果我設置了fixtureDef過濾器 - 物體不會相互碰撞,但我無法檢測到碰撞。

請幫忙!

+3

嘗試閱讀有關傳感器的更多信息http://www.box2d.org/manual.html – Cyclonecode

回答

18

如果夾具永遠不需要與任何物體碰撞,您可以將其製成傳感器。如果您需要它碰撞某些事物,但不碰其他人,則可以在碰撞監聽器的PreSolve中進行聯繫 - > SetEnabled(false),具體取決於它碰撞的內容。

+0

附錄:您也可以使用碰撞掩碼和/或碰撞組來控制夾具應該也不應該碰撞。 – Thomas

+0

他仍然想要檢測碰撞發生時,他只是不想要任何碰撞響應。更改碰撞掩碼將完全防止碰撞檢測。 – iforce2d

+0

是的。這需要與傳感器燈具結合使用。 – Thomas

8

你想要的是一個身體上的傳感器夾具。從box2d手冊:

有時遊戲邏輯需要知道兩個固定裝置重疊的時間,但應該沒有碰撞響應。這是通過使用傳感器完成的。傳感器是檢測碰撞但不產生響應的固定裝置。

您可以將任何燈具標記爲傳感器。傳感器可能是靜態的或動態的。請記住,你可能有多個固定裝置,你可以有任何混合的傳感器和固體裝置。

傳感器不生成接觸點。有兩種方法可以得到一個傳感器的狀態:

  1. b2Contact :: IsTouching
  2. b2ContactListener :: BeginContact和EndContact

您可以設置一個固定的傳感器,然後寫它進入你的聯繫監聽器。如果夾具的傳感器標誌設置爲真,它將提供碰撞數據,而不物理模擬碰撞(即,允許您測試任何其他碰撞夾具之間的重疊)。

這是一個有用的教程,開始使用傳感器Ray Wenderlich sensor tutorial