文章目录
  1. 1. 碰撞
    1. 1.1. 点与圆
    2. 1.2. 点与矩形
    3. 1.3. 矩形与矩形
    4. 1.4. 圆与圆
    5. 1.5. 圆与矩形

游戏中的碰撞检测存在于多个地方,一般都会使用游戏引擎或者物理引擎所
提供的方法。这里我总结一些关于处理碰撞的东西。

碰撞

点与圆

圆在程序中体现的数据为圆心,半径。
判断点于圆的关系,可以判断点与圆心的距离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为半径。

文章目录
  1. 1. 碰撞
    1. 1.1. 点与圆
    2. 1.2. 点与矩形
    3. 1.3. 矩形与矩形
    4. 1.4. 圆与圆
    5. 1.5. 圆与矩形