環境:
編輯器: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))
向量的投影:
分離軸投影碰撞檢測:
這裏的碰撞檢測其實可以認爲是邊的檢測
我們先開左邊的
我們要檢測這兩個圖形的碰撞那麼其實很簡單我們就判斷每一條邊的投影是否有相交如果是有相交我們就判斷碰撞
主要的實現思路是先獲取形狀的點
然後通過點轉化爲向量 然後我們通過我們的向量的投影來獲取投影的大小 然後對投影的大小進行判斷判斷其投影是否相交
所以這裏的obb就有七條邊的檢測
有了這些公式我們就可以自己定義一個OBB算法
下面我們看看我們的實現方式:
對象方法的主要截圖:
主要方法:
obb
通過分離軸來檢測兩個sprite對象是否碰撞了 碰撞了返回true 沒有碰撞返回false
該方法支持兩種模式的檢測 一種是通過對象的形式 一種是通過結構的形式 結構包含了 一個形狀的必要點和旋轉信息
aabb
通過檢測兩個矩形是否碰撞來判斷sprite是否碰撞 適用與沒有旋轉的sprite精靈對象
詳細的算法說明我們可以看:分離軸http://www.demodashi.com/demo/10423.html
這是我們要做的目標:
項目開源地址:
https://github.com/yinhui1129754/fishing