2D游戏中的碰撞检测
更新日期:
游戏中的碰撞检测存在于多个地方,一般都会使用游戏引擎或者物理引擎所
提供的方法。这里我总结一些关于处理碰撞的东西。
碰撞
点与圆
圆在程序中体现的数据为圆心,半径。
判断点于圆的关系,可以判断点与圆心的距离dis和半径r的关系。
dis < r 在圆内
dis > r 在园外
点与矩形
矩形在程序汇总体现的数据为左下角的顶点与长宽。
判断点与矩形的关系,可以判断点的x,y坐标与顶点坐标的关系。
在矩形内: (x1 < x0 < x2) && (y1 < y0 < y2)
矩形与矩形
第一种方法:
检测两个矩形是否碰撞,可以判断每一个矩形的每一个顶点是否在另一个矩形内。
如果有至少一个这样的点,那么两个矩形就有碰撞。
第二种方法:
满足以下所有条件。
a.第一个矩形的右边线在第二个矩形的左边线右边
b.第一个矩形的左边线在第二个矩形的右边线左边
c.第一个矩形的下边线在第二个矩形的上边线下面
d.第一个矩形的上边线在第二个矩形的下边线上边
使用第二种方法会更好
圆与圆
计算两个圆心的距离dis
判断dis与圆心r1+r2的关系
dis > r1 + r2没有碰撞
dis <= r1 + r2碰撞
圆与矩形
矩形与圆的碰撞可以转化成这样一个问题
找出能代表矩形的标准点,判断这个点与圆的关系。
若这个点在圆内则碰撞,否则不碰撞。
这个点的x,y坐标是这样描述的:
a.首先求出圆心到矩形中心的向量(dx,dy)。
b.令x等于abs(dx)和矩形宽的一半的较小值。
c.令y等于abs(dy)和矩形高的一半的较小值。
最后求出点(x,y)与圆的关系。
将点与圆平移至坐标系原点,即为
(dx-rx) X (dx-rx) + (dy-ry) X (dy-ry) <= r X r
其中点(rx,ry)为圆心,r为半径。