程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 碰撞檢測

碰撞檢測

編輯:關於C#
 

在游戲開發中,經常需要進行碰撞檢測算法的實現,例如判斷前面是否有障礙以及判斷子彈是否擊中飛機,都是檢測兩個物體是否發生碰撞,然後根據檢測的結果通過碰撞檢測算法做出不同的處理。

  進行碰撞檢測算法的物體可能有些的形狀和復雜,這些需要進行組合碰撞檢測,就是將復雜的物體處理成一個一個的基本形狀的組合,然後分別進行不同的檢測。

  下面簡單介紹一下兩種最基本的形狀進行碰撞的時候進行的處理。

  1、矩形和矩形進行碰撞檢測算法

  一般規則的物體碰撞都可以處理成矩形碰撞,實現的原理就是檢測兩個矩形是否重疊。我們假設矩形1的參數是:左上角的坐標是(x1,y1),寬度是w1,高度是h1;矩形2的參數是:左上角的坐標是(x2,y2),寬度是w2,高度是h2。

  在檢測時,數學上可以處理成比較中心點的坐標在x和y方向上的距離和寬度的關系。即兩個矩形中心點在x方向的距離的絕對值小於等於矩形寬度和的二分之一,同時y方向的距離的絕對值小於等於矩形高度和的二分之一。 下面是數學表達式:

  x方向:| (x1 + w1 / 2) – (x2 + w2/2) | < |(w1 + w2) / 2|

  y方向:| (y1 + h1 / 2) – (y2 + h2/2) | < |(h1 + h2) / 2|

  在Java ME程序中,只需要將上面的條件轉換成代碼就可以實現了。

  但是矩形碰撞只是一種比較粗糙的碰撞檢測算法,因為很多實際的物體可能不是一個規則的矩形。

  下面介紹一下圓形碰撞。

  2、圓形和圓形的碰撞檢測算法

  圓形和圓形的碰撞應該說是一種最簡單的碰撞,因為在數學上對於兩個圓形是否發生重疊,有計算兩個圓心之間的距離的公式。那麼條件就變為:計算兩個圓心之間的距離是否小於兩個圓的半徑和。

  假設圓形1的左上角坐標是(x1,y1),半徑是r1,圓形2的左上角的坐標是(x2,y2),半徑是r2。

  因為MIDP1.0中沒有浮點數,而且浮點數的運算比較慢,所以我們將條件做一個簡單的變換:對於條件的兩邊都進行平方,這樣就去掉了開方的運算步驟。

  下面是數學表達式:

  (x1 – x2)2 + (y1 – y2)2 < (r1 + r2)2

  在Java ME程序中,只需要將上面的條件轉換成代碼就可以了。

  上面介紹的只是最基本的碰撞檢測算法的實現,而實際的編程過程中遇到的碰撞檢測問題要比這些復雜很多,還需要其他形式的檢測,還需要進行更加深入的學習。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved