gpt4 book ai didi

python - Pygame 圆及其关联的用于碰撞检测的矩形

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:21 25 4
gpt4 key购买 nike

我在 Pygame 绘制圆及其关联的矩形时遇到问题。当我绘制一个圆(例如 pygame.draw.circle(surface, color, center, radius))时,它会创建一个矩形。我正在尝试使用 pygame.collidepoint(event.pos) 进行碰撞检测,其中 event.pos 是鼠标单击的位置。我的窗口大小为 500x400,背景为黑色,绘制的圆圈为蓝色。当我单击圆的外部(在黑色背景中)时,圆的大小应该通过将半径乘以整数来增加。相反,当在圆内部记录点击时,圆会通过半径除以整数来缩小。

我遇到的问题是,矩形实际上与圆圈的大小不同,因此,当您在圆圈很大但没有完全填充窗口时单击背景时,它会缩小而不是变大(即记录圆圈内的点击)。在某一点上,即使圆没有完全填充它,与圆关联的矩形也会变得与窗口大小相同,这会导致在内部注册单击。

我的问题是如何仅对圆圈使用命中检测,而不对大于实际圆圈的矩形使用命中检测?

相关代码如下:

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)

最佳答案

只需计算圆心与鼠标点击位置之间的距离即可:

x1, y1 = position
x2, y2 = self.circle.center
distance = math.hypot(x1 - x2, y1 - y2)

然后检查这个距离是否小于或等于圆的半径:

if distance <= self.radius:
self.radius = self.radius // 2
...

关于python - Pygame 圆及其关联的用于碰撞检测的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34054248/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com