游戏中的碰撞(二)

    xiaoxiao2021-03-25  130

               在上一篇中我们了解了游戏中矩形与矩形,圆形与原型的碰撞,而在本篇中,我们则来研究点与矩形,

    点与圆形的碰撞,点与点。本节在游戏中的应用主要是在于判断点击按钮,判断子弹相撞等等方面的应用。

        (一)点与矩形的碰撞

     

           如图片中的点与矩形,我们可以看出点与矩形的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; }

           

    转载请注明原文地址: https://ju.6miu.com/read-19343.html

    最新回复(0)