我正在开发一个 Java 游戏(但开发语言并不重要),包括像球或冰球这样的圆形物体,现在正在研究碰撞。我使用计时器,所以在每一帧我检查是否发生碰撞。
这是一个表示对象右上角的图表。
对象的中心由点[0,0]表示,其半径为10px,单位为像素。
现在,如果我的对象(例如obj_1
)是方形/菱形(蓝线),要查找另一个 ( obj_2
) 是否碰撞它,我只需要获取它们的坐标并通过检查Math.abs(obj_1.x - obj_2.x) + Math.abs(obj_1.y - obj_2.y) <= radius
我会知道是否存在碰撞。
但是圆形(红线)的问题更棘手,因为它占用更多空间,而且这个占用的空间不受直线的限制。当然,我将不得不对一些值进行四舍五入(例如在上图中,如果我想检查碰撞,x = 2
我将不得不将看起来像 9.5 的 y 值四舍五入到 10)。但我根本不知道如何得到这个公式。任何帮助将不胜感激。