在这个作品中,每个碰撞箱是一条线段。这条线段过两个点(x1,y1)和(x2,y2)。
由平面几何知识得,这条线段所在直线的方程为
物体的行进轨迹也是一条线段,而且这条线段已知一个定点和它与竖直方向的夹角。
由平面几何知识得,这条线段所在直线的方程为:
(式中的d即物体的方向)
然后将(1)(2)两式联立,就可以解得:
这里解出的x和y就是这个物体如果一直沿当前路径运动,将会碰撞在碰撞箱直线的某处。
现在我们获得了这个交点。而这个交点的意义是:如果这个物体的运动长度足够,这个物体一定会在这个位置与碰撞箱碰撞。然而存在两个问题:一、交点可能不在碰撞箱上(也就是不在这条线段上);二、交点可能不在运动轨迹(仍指线段)上。
碰撞箱很可能没有挡在物体的运动轨迹所在直线上。因此在作品中,需要判断这个交点是否在运动轨迹上。这个判断十分简单,只要看这个交点的横坐标和纵坐标是否处于两个端点的横坐标和纵坐标之间。如果是,那么这个交点就在运动轨迹上。
这个碰撞点已经处于碰撞箱上了,但物体的运动长度往往不足以让物体碰撞到。因此我们需要检测这个物体在运动一定距离后,会不会到达碰撞箱所在直线的另一端。由平面几何知识得,我们只要将物体运动前后的中心点带入直线方程的左边,如果结果的正负不同则代表两点在直线的两端。因此,在本作品中有一个函数pmJudge,用于检测移动前后这个物体的中心是否处于碰撞箱不同的两侧。如果判断出了这个物体运动这么长的距离,真的会碰到碰撞箱,就应该让这个物体移动到交点这里,而不是让物体移动原来的步数。
此时,这个碰撞箱的一代产品已经诞生,我留了一个备份,楼中楼应该会出现这个备份的下载链接。如果没有链接或者链接失效,请联系我补链。