如何在PyGame中创建圆形碰撞检测功能?

时间:2019-06-11 16:41:25

标签: python python-3.x pygame

我正在尝试使用pygame制作类似agar.io的游戏,对于那些不知道的人,这是一个您可以用光标控制圆圈运动并吃掉其他圆圈敌人以增加尺寸的游戏, python和我不太了解,我现在自己搞清楚了一切,但是我停留在碰撞检测部分,我想创建一个函数,当它碰到另一个圆时返回true。我尝试搜索解决方案,但找不到任何解决方案。

1 个答案:

答案 0 :(得分:1)

如果两个中心点之间的距离小于两个半径的和,则

2个圆相交。两点之间的距离可以通过Euclidean distance来计算:

dist = math.sqrt(dx*dx + dy*dy)

在pygame中,可以通过pygame.math.Vector2.distance_to()计算得出。

如果第一个圆是由中心点(x1, y1)和半径radius1定义的,而第二个圆是由中心点(x2, y2)和半径radius2定义的,然后:

centerPoint1 = pygame.math.Vector2(x1, y1)
centerPoint2 = pygame.math.Vector2(x2, y2)

collide = centerPoint1.distance_to(centerPoint2) < (radius1 + radius2)
如果两个圆圈相交,则

collideTrue

如果要避免平方根运算,则可以使用distance_squared_to()并比较两个长度的平方:

max_dist_square = (radius1 + radius2)*(radius1 + radius2)
collide = centerPoint1.distance_squared_to(centerPoint2) < max_dist_square