我遇到了Pygame绘制圆圈及其相关矩形的问题。当我绘制一个圆形如pygame.draw.circle(表面,颜色,中心,半径)时,它会创建一个矩形。我试图使用pygame.collidepoint(event.pos)进行碰撞检测,其中event.pos是鼠标点击的位置。我的窗口大小为500x400,背景为黑色,绘制的圆圈为蓝色。当我在圆圈外部(在黑色背景中)单击时,圆圈的大小应该通过将半径乘以int来增加。相反,当在圆圈内部记录点击时,圆圈会通过将半径除以int而缩小。
我遇到的问题是,矩形实际上与圆圈的大小不同,因此当圆圈较大但没有完全填满窗口时单击背景时,它会收缩而不是变大(即在圆圈内注册一个点击)。在某一点上,与圆相关联的矩形变成与窗口相同的大小,即使圆圈没有完全填充它,这导致在内部记录点击。
我的问题是我如何才能对圆圈使用命中检测,而不是比实际圆圈更大的矩形?
以下是相关代码:
def handleMouseDown(self, position):
if self.circle.collidepoint(position):
self.radius = self.radius // 2
else:
self.radius = self.radius * 2
self.draw()
def draw(self):
self.surface.fill(self.black)
self.circle = pygame.draw.circle(self.surface, self.color, self.center, self.radius)
答案 0 :(得分:1)
只需计算圆心和鼠标点击位置之间的距离:
x1, y1 = position
x2, y2 = self.circle.center
distance = math.hypot(x1 - x2, y1 - y2)
然后检查此距离是否小于或等于圆的半径:
if distance <= self.radius:
self.radius = self.radius // 2
...
答案 1 :(得分:0)
当检测到单击时,让处理程序确定它是否实际位于圆圈内。否则忽略它。