16.Direct2D 捕魚遊戲開發-檢查對象colVec.h的封裝

環境:

編輯器:VS2015

系統:win10 專業版

碰撞:aabb obb盒模型(obb採用分離軸進行判斷)

渲染:direct2d

檢測對象說明:

我們這個檢測對象只是提供一個對碰撞檢測的方法和一些算法的方法並不提供實體什麼的物理算法具體的物理算法我們是根據不同遊戲進行不同的處理(但是碰撞檢測是都是一樣的)

相關概念:

向量:有方向的數量(向量A(x1,y1),原點B(0,0) 向量BA就表示爲(x1-0,y1-0)就是(x1,y1))

向量的模:就是向量的長度 以座標表示就是A(x1,y1),|A| = 根號下(x1^2+y1^2)

向量點乘:a*b=|a|*|b|*cos向量夾角(向量的座標相乘:(x1,y1)*(x2,y2)=x1x2+y1y2)

向量的單位向量:1/|a|*a(座標表示 A(x,y) A的單位向量爲:(1/根號下(x^2+y^2)*x,1/根號下(x^2+y^2)*y))

向量的投影: 

分離軸投影碰撞檢測:

https://misc.aotu.io/JChehe/2017-02-13-2d-collision-detection/sat_projection_two.png

這裏的碰撞檢測其實可以認爲是邊的檢測

我們先開左邊的

我們要檢測這兩個圖形的碰撞那麼其實很簡單我們就判斷每一條邊的投影是否有相交如果是有相交我們就判斷碰撞

主要的實現思路是先獲取形狀的點

然後通過點轉化爲向量 然後我們通過我們的向量的投影來獲取投影的大小 然後對投影的大小進行判斷判斷其投影是否相交

所以這裏的obb就有七條邊的檢測 

有了這些公式我們就可以自己定義一個OBB算法

下面我們看看我們的實現方式:

對象方法的主要截圖:

主要方法:

obb

通過分離軸來檢測兩個sprite對象是否碰撞了 碰撞了返回true 沒有碰撞返回false

該方法支持兩種模式的檢測 一種是通過對象的形式 一種是通過結構的形式 結構包含了 一個形狀的必要點和旋轉信息

aabb

通過檢測兩個矩形是否碰撞來判斷sprite是否碰撞 適用與沒有旋轉的sprite精靈對象

詳細的算法說明我們可以看:分離軸http://www.demodashi.com/demo/10423.html

這是我們要做的目標:

項目開源地址:

https://github.com/yinhui1129754/fishing

遊戲開發交流羣:

859055710

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章