2011-08-28 133 views
2

我有一顆可以彈跳的子彈。我想知道子彈是在x方向還是y方向彈跳。就像你在圖像上看到的,只有幾個像素的差異讓子彈反彈到另一個方向。 (供參考:是的,子彈可以在我的遊戲反彈;-))Cocos2d:計算與子彈碰撞時的子彈彈跳

http://i.stack.imgur.com/5EmGz.png

有誰知道這個問題的簡單和固溶體?

非常感謝您的幫助

菲利克斯

+0

你使用Box2D或Chipmunk物理? – Felix

+0

當時我沒有使用物理引擎,因爲它應該只是一個坦克遊戲。你建議使用一個嗎?引擎不慢嗎? – KrauseFx

+0

我建議使用Box2D。那麼問題就會消失,因爲Box2D會爲你做。 – Felix

回答

5

爲了實現反彈,你需要做兩件事情:

  1. 碰撞檢測
  2. 更新位置子彈
  3. 的&速度

第1步:

如果你想正確的,你必須計算矩形邊框的交叉與連接與計算的下一個子彈的位置當前的子彈位置(如果沒有障礙物)的線檢測碰撞。如果有多個交點,則取第一個碰到邊界的交點。在Box2D中,您將使用raycast來獲取交點。

這個問題的答案在這裏將幫助您確定是否有交叉:Detect if line segment intersects square

現在,你需要知道該矩形的側面碰撞發生。 以下方法假定您已經知道有碰撞,但不知道在哪裏:

Collision detection

當子彈的位置在區域B,d,E或G其明顯的,其邊界將被打。

在任何其他情況下,它不是很清楚。讓我解釋它爲區域H:

  1. 計算的向量h(從子彈的位置,以降低矩形的右下角)
  2. 計算的角度的出速度矢量v(使用tangens)
  3. 計算(使用tangens)
  4. 角度b選自H比較a和b:如果一個< b碰撞是在右側,如果> b碰撞是在底側

繼續similarl Ÿ在區域A的情況下,C或F.

第2步:

如果你有交點,設置子彈的交叉點的新位置(如果你無法得到交點,更新位置就好像沒有障礙物一樣,但這會有點不準確)。 如果碰撞發生在底部或頂部,則反轉速度的y分量。 如果碰撞發生在右側或左側,則反轉速度的x分量。

祝你好運!

+0

非常感謝您的出色答案。碰撞檢測已經完成。唯一缺少的是如果子彈應該反彈到x或y。你的意思是這段代碼應該有幫助[鏈接](http://stackoverflow.com/questions/1354472/detect-if-line-segment-intersects-square/1354575#1354575) – KrauseFx

+1

我在編輯的文章中提供瞭解決方案 – Felix