2014-12-07 38 views
1

嗨,我想知道如何創建一個圓形碰撞,也作爲一個傳感器。例如,當玩家輸入敵方的半徑時,敵人就會開始追逐玩家。 根據我所嘗試的,我只使用了一個碰撞盒,它是RECT SpriteRect。但是這對於這個圈子來說不夠準確。我正在考慮通過使用D3DXVECTOR2使用矢量,但我不善於轉換。請幫助我如何實現此目的。 enter image description here如何創建一個圓形碰撞檢測? C++

+2

我喜歡你的繪畫:) – Quest 2014-12-07 11:59:11

+0

@Quest哈哈哈,這只是一個概念。沒有製作真正的遊戲。只是學習。我以前使用stencyl做過一個。超級簡單,因爲它都是拖放。所以現在我盡我所能學習C++儘可能多:)如果你喜歡,請看看它:[Lost Dungeon](http://www.kongregate.com/games/yawnm3/lost-dungeon) – Student 2014-12-07 12:02:13

回答

6

點(xa,ya)在(xc,yc)的圓內半徑r?

還記得畢達哥拉斯嗎? - 它確定兩點之間的距離,並且確定某個半徑的圓內是否有某物需要確定到圓心的距離是否小於半徑:

bool IsPointInCircle(float xa, float ya, float xc, float yc, float r) 
{ 
    return ((xa-xc)*(xa-xc) + (ya-yc)*(ya-yc)) < r*r; 
} 

兩個圓之間的碰撞檢測同樣簡單,只需將'r'作爲兩個圓的半徑之和即可。因爲這是兩個中心接觸時的距離。

要在正方形和圓形之間進行碰撞檢測,您需要計算從線到點的距離。圓形幾乎是最容易做碰撞檢測的形狀。

+0

For 3dim( (xa-xc)(xa-xc)+(ya-yc)(ya-yc)+(za-zc)(za-zc)) Quest 2014-12-07 12:14:27

+0

@任務,你儘可能接近:這裏是3d球體。 ((xa-xc)(xa-xc)+(ya-yc)(ya-yc)+(za-zc)(za-zc)) Zuu 2014-12-07 12:19:51