android 檢測碰撞匯總

來源:互聯網
上載者:User
Android 遊戲檢測碰撞方法
一、地圖格子劃分檢測
  最簡單的一種檢測,就是把地圖(或者稱為情境,總之是指碰撞發生的範圍)劃成一個個格子,類似仙劍奇俠傳這樣。假設地圖有800*600px,20*20個像素為一格。那麼可以劃為40*30個格子。地圖中參與檢測的對象都儲存著自身所在的格子座標,判斷碰撞就顯而易見了,例如可以認為兩個物體在相鄰格判為碰撞,或者兩個物體在同一格。採用這種方式有個要求,就是地圖中所有可能參與碰撞的物體都要是20*20像素左右大小或者是其整數倍,例如房子佔了3*3個格子,諸如此類。如果不遵守這個規則,有的物體只佔了格子的一半,那麼在玩家眼裡這種檢測就顯得非常的粗糙。這種檢測就像是把地圖的像素點放大幾十倍一樣,與逐像素檢測相比,效率提高了幾十倍甚至上百倍。這種方式可運用於對檢測要求不嚴格的遊戲,例如踩地雷的RPG、推箱子之類的智力遊戲。
  二、矩形檢測
  當地圖中的物體不能嚴格按照某個塊大小的整數倍來繪製時,那麼就需要另想其他的方法。這種方法適用於地圖中的物體近似為矩形或者雖然不是矩形,但是碰撞精度要求不高的情況下。每個物體記錄一個能夠將自己框住的最小矩形的左上方座標和矩形長寬。碰撞退化為判斷矩形與矩形之間是否重疊,而這僅需要4次比較即可得出,速度很快。但為了判斷整個情境中的物體,必須取第一個物體,迭代其他所有物體進行判斷,再取第二個物體,迭代除第一第二個物體外的所有物體進行判斷,以此類推。總計要進行(n-1)!次矩形判斷才能準確得出情境中所有的碰撞可能。

  三、圓形檢測
  與上一種方法類似,區別在於用一個能夠包含物體的最小圓代替了矩形。主要是考慮到遊戲中的物體外形以平滑為主,例如人物角色。而判斷兩個圓是否碰撞的計算也很簡單,就是判斷兩個圓心之間的距離是否小於兩個圓的半徑之和。雖然球形檢測在某些情況下提高了精度,但卻損失了速度,因為點距離的計算需要用到平方和開方。具體相比慢多少我就不太清楚了。另外,為了計算整個地圖的所有碰撞可能,也要進行(n-1)!次比較。

  四、像素檢測
  精確到像素級,已經不能比這更精確了,相對的,效率也是最低的。怎樣判斷兩個物體是否碰撞呢?在過去png格式圖片還不盛行的時候,遊戲中用到的圖片中的透明部分是指定用某種顏色來表示的,例如洋紅色。就像電影中的綠幕藍幕,通過處理把這些顏色的像素點當做透明點處理,而為了判斷檢測,需要準備一張原映像的黑白圖,黑色地區表示透明,這張圖片中的每個像素值為0或者1,判斷檢測的時候取兩張圖片的黑白圖,進行與運算,結果為1(有白點重疊),則判為碰撞。但是現在有了PNG和XNA,逐像素檢測就相對簡單一些。首先仍然需要有一個矩形框包圍物體,通過矩形檢測得到重疊的矩形地區可以大大減少檢測的像素點數量。然後在這個地區內,取兩個圖片的點逐行逐列迭代,如果遇到某個點兩張圖片均有顏色存在,即判為碰撞。同理,進行(n-1)!次比較後得到全地圖的碰撞可能。

  五、四叉樹檢測
  準確的說這事在第三四五種方法的基礎上的最佳化策略,或者說是第一種方法同後三種方法的組合應用。主要是針對那最後的(n-1)!次比較。方法是,像第一種方法一樣將地圖分為格子,格子的大小應該能夠容納10個左右的地圖中最大物體,例如一個800*600的地圖可能就劃為9個區。同樣的,每個物體要記錄自己所在的區座標以及矩形包圍盒。如果該物體完全位於該區內,則只要將其與該區內的其他物體判斷碰撞。如果該物體雖然位於某個區,但是小部分位於隔壁區,則額外的需要迭代隔壁區的物體,這點效率損失是可以容忍的,相比於迭代全地圖的物體。

  有個問題,我怎麼知道哪些物體是跟該物體位於同一個區呢?那不是還是要迭代一遍所有物體?這時候就是題目發揮的地方的,之所以稱為四叉樹檢測(當然,這名字是我自己取的),就是因為那些區塊是以四叉樹的方式連結的,即得到一個區塊的對象,就可以直接得到其上下左右相鄰的區塊的對象,而物體可以是儲存在所在區的一個列表中。這樣就不用遍曆所有物體也可以直接取出隔壁區的物體了。當地圖很大的時候,四叉樹的優勢體現得很好。

  六、3D中的碰撞檢測
  以上是我所掌握碰撞方法,可能還有更多吧。那麼3D中的檢測其實是2D的延伸,例如矩形檢測變為立方體檢測,圓形檢測引申為球形檢測,四叉樹檢測進化為八叉樹檢測。

  當然了,凡是有例外。逐像素檢測方法在3D中沒有相對應的方法,因為3D中的物體的表示最小單元是三角型而非點。其實也可以說逐三角片檢測是逐像素檢測的3D版,但畢竟是平面碰撞的檢測,需要一定的計算公式,而不是與或一下就OK的。這裡就不贅述了。


android Region碰撞
http://www.apkbus.com/android-71766-1-1.html

android 矩形碰撞
http://www.apkbus.com/android-70408-1-1.html

android 圓形碰撞
http://www.apkbus.com/android-70407-1-1.html

android 像素碰撞 
http://www.apkbus.com/android-71769-1-1.html 

android 線段與矩形碰撞檢測
http://www.apkbus.com/android-70405-1-1.html

簡單碰撞檢測的3D遊戲 
http://www.apkbus.com/android-70398-1-1.html 

2D遊戲中圓形與矩形碰撞檢測 
http://www.apkbus.com/android-70411-1-1.html 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.