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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值