2012-07-26 84 views
3

我在一個互相碰撞的世界中有幾個球。世界各地都有靜止的牆壁。檢測「卡住」的身體

有時候,他們最終在他們繼續向上/向下移動或左/沿着相同的路徑正確的位置(運動垂直於牆面?)

有沒有簡單的方法來檢測這一點,然後,在任一方向上施加一點旋轉?

任何語言的box2d僞代碼或代碼將不勝感激。

編輯:圖片,如提出要求@Andrew

enter image description here

如果球繼續移動這樣的(左/右/左/右...),我想給它輕輕一推所以它從當前路徑移動。

+0

你可以發佈一個圖像與這種情況嗎? – Andrew 2012-07-29 06:52:03

+0

@Andrew添加了一張圖片。我希望它使事情更清楚。 – Dogbert 2012-07-29 07:06:39

+0

球會碰撞嗎? – Raiden 2012-07-29 07:08:59

回答

1

我認爲你可以創建b2ContactListener子類來檢測ball-wall碰撞(這很簡單,並在Box2D manual解釋)。在你爲每個球存儲3個速度值之後。

  1. 之前第一個ball-wall碰撞。
  2. 第一次出現ball-wall後發生碰撞。
  3. 經過第二次ball-wall碰撞。

當你獲得這三個速度(使用b2BodyGetLinearVelocity功能) - 檢查,如果他們趴在一些精密的同一行(除了有標誌相同方向)。如果滿足這個條件 - 應用一點旋轉

+0

感謝您的答案安德魯。答案看起來不錯,它應該工作(我現在無法測試)。我會接受你的回答並獎勵賞金。再次感謝! – Dogbert 2012-07-30 12:31:11

0

我以爲你可以測量每次碰撞的角度?我現在沒有時間發佈正確的代碼(今晚也許,如果你需要一個例子),但你可以有某種機制來檢查球和牆壁之間的碰撞角度。

如果它正好是90度,則可以將球(用戶數據或某個外部陣列)標記出來,然後開始跟蹤牆與該球之間連續90度碰撞的次數。如果兩個90度的碰撞一個接一個地發生,那麼可以安全地假定球被卡住並輕輕推動。

+0

2碰撞就夠了 – Andrew 2012-07-29 07:45:52

+0

公平點。編輯我的答案。 – Andrey 2012-07-29 07:52:22

+0

這個想法在理論上聽起來很不錯,雖然我不知道如何計算碰撞角度。如果你可以發佈一些(僞)代碼,那太棒了! – Dogbert 2012-07-29 13:22:05