本文主要是介绍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))
向量的投影:
分离轴投影碰撞检测:
这里的碰撞检测其实可以认为是边的检测
我们先开左边的
我们要检测这两个图形的碰撞那么其实很简单我们就判断每一条边的投影是否有相交如果是有相交我们就判断碰撞
主要的实现思路是先获取形状的点
然后通过点转化为向量 然后我们通过我们的向量的投影来获取投影的大小 然后对投影的大小进行判断判断其投影是否相交
所以这里的obb就有七条边的检测
有了这些公式我们就可以自己定义一个OBB算法
下面我们看看我们的实现方式:
对象方法的主要截图:
主要方法:
obb
通过分离轴来检测两个sprite对象是否碰撞了 碰撞了返回true 没有碰撞返回false
该方法支持两种模式的检测 一种是通过对象的形式 一种是通过结构的形式 结构包含了 一个形状的必要点和旋转信息
aabb
通过检测两个矩形是否碰撞来判断sprite是否碰撞 适用与没有旋转的sprite精灵对象
详细的算法说明我们可以看:分离轴http://www.demodashi.com/demo/10423.html
这是我们要做的目标:
项目开源地址:
https://github.com/yinhui1129754/fishing
游戏开发交流群:
859055710
这篇关于16.Direct2D 捕鱼游戏开发-检查对象colVec.h的封装的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!