在遊戲中,經常需要進行碰撞檢測的實現,例如判斷前面是否有障礙以及判斷子彈是否擊中飛機,都是檢測兩個物體是否發生碰撞,然後根據檢測的結果做出不同的處理。 進行碰撞檢測的物體可能有些的形狀和複雜,這些需要進行組合碰撞檢測,就是將複雜的物體處理成乙個乙個的基本形狀的組合,然後分別進行不同的檢測。 下面簡單介紹一下兩種最基本的形狀進行碰撞的時候進行的處理。
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 |
在程式中,只需要將上面的條件轉換成**就可以實現了
2、圓形和圓形的碰撞
圓形和圓形的碰撞應該說是一種最簡單的碰撞,因為在數學上對於兩個圓形是否發生重疊,有計算兩個圓心之間的距離的公式。
那麼條件就變為:計算兩個圓心之間的距離是否小於兩個圓的半徑和。
假設圓形1的左上角座標是(x1,y1),半徑是r1,
圓形2的左上角的座標是(x2,y2),半徑是r2。
因為midp1.0中沒有浮點數,而且浮點數的運算比較慢,
所以我們將條件做乙個簡單的變換:對於條件的兩邊都進行平方,這樣就去掉了開方的運算步驟。
下面是數學表示式:
(x1 – x2)2 + (y1 – y2)2 < (r1 + r2)2
在程式中,只需要將上面的條件轉換成**就可以了。
遊戲開發基礎 碰撞檢測
碰撞就是遊戲中的元素是否碰到一起,比如 遊戲,沒躲避炮彈就算碰撞,要檢測出來,要game over的。主要講講2d遊戲裡的碰撞檢測,傳統的2d遊戲可以把不同元素當作基本圖形粗糙地來檢測碰撞與否?1 矩形判斷 比如把遊戲中敵我雙方人物都當作矩形來檢測兩個矩形是否相交。那麼如何判讀兩個矩形是否相交呢?相...
遊戲中的碰撞檢測
遊戲中的碰撞檢測方式有很多,不同的演算法之間主要是在精度和速度之間權衡。以下幾種方式按照速度排序說明。以2d為例,3d不過是增加了一維罷了,演算法理解上沒太大區別。一 地圖格仔劃分檢測 最簡單的一種檢測,就是把地圖 或者稱為場景,總之是指碰撞發生的範圍 劃成乙個個格仔,類似仙劍奇俠傳這樣。假設地圖有...
遊戲中的碰撞檢測
遊戲中的碰撞檢測方式有很多,不同的演算法之間主要是在精度和速度之間權衡。以下幾種方式按照速度排序說明。以2d為例,3d不過是增加了一維罷了,演算法理解上沒太大區別。一 地圖格仔劃分檢測 最簡單的一種檢測,就是把地圖 或者稱為場景,總之是指碰撞發生的範圍 劃成乙個個格仔,類似仙劍奇俠傳這樣。假設地圖有...