在上一篇中我们了解了游戏中矩形与矩形,圆形与原型的碰撞,而在本篇中,我们则来研究点与矩形,
点与圆形的碰撞,点与点。本节在游戏中的应用主要是在于判断点击按钮,判断子弹相撞等等方面的应用。
(一)点与矩形的碰撞
如图片中的点与矩形,我们可以看出点与矩形的3种位置关系。点在矩形内,点在矩形上,点在矩形外。
在游戏中的应用一般用来判断点是否在矩形内。
坐标系统仍然沿用上一节的坐标系统,假设矩形的左上角的坐标为(x1,y1),横向宽度为w,纵向高度为h,点的坐标为(x2,y2)。同android,windows的屏幕坐标系统一样,我们假设左上角为原点(0,0),横向向右为x轴正向,纵向为y轴正向。
判断一个点是否在 矩形内,就需要判断点的x坐标是否大于或等于x1,小于等于x1+w,y坐标是否大于y1,小于y1+h.
bool collision(int x2, int y2, int x1, int y1, int w, int h)
{
if (x2 >= x1 && (x2 <= x1 + w) && y2 >= y1 && (y2 <= y1 + h))
return true;
return false;
}
(二)点与圆形的碰撞
如图片中的点与圆形,与矩形一样,点与圆形的位置关系有3种,分别为点在圆形上,点在圆形外,点在圆形内。
在游戏中检测碰撞则为检测点是否在圆形内。
假设圆形坐标原点为(x1,y1),半径为r,点的坐标为x2,y2
那么判定一个点是否在圆形内,就需要判定点与坐标原点的距离是否大于圆形的半径,如果大于圆形的半径,那么就没有没在圆形内部,相反则在圆形内部,则依据2点之间的距离公式,我们有sqrt(pow(x1-x2,2),pow(y1-y2,2))>r。不过,考虑到开平方付出的实际代价比较大的问题,我们只需要比较平方即可。
(三)点与点的碰撞
假设点a坐标为(x1,y1),点b坐标为(x2,y2)
判定这2点是否相撞则极为简单,只需判定2点是否重合即可,即如果x1=x2,并且y1=y2,那么这2点即重合,也就是这2点发生了碰撞。
bool collision(int x1, int y1, int x2,int y2)
{
if (x1==x2&&y1==y2)
return true;
return false;
}