이것은 내가 지금 생각할 수있는 최선의 것입니다. 사각형의 모서리와 원의 중심을 비교합니다. 그 정도면 충분하지 않은 경우 사각형 모서리를 따라 중심점을 추가하면됩니다.
아니 완벽한 솔루션,하지만 당신이 작성하는 게임에 따라서는
def isInRange(rectangle, circle):
return (
(rectangle.topleft.x - circle.centerx)**2 + (rectangle.topleft.y - circle.centery)**2 <= (mindist + r_circle)**2 or #circle in upper left quadrant of rectangle
(rectangle.bottomleft.x - circle.centerx)**2 + (rectangle.bottomleft.y - circle.centery)**2 <= (mindist + r_circle)**2 or #circle in bottom left quadrant of rectangle
(rectangle.bottomright.x - circle.centerx)**2 + (rectangle.bottomright.y - circle.centery)**2 <= (mindist + r_circle)**2 or #circle in bottom right quadrant of rectangle
(rectangle.topright.x - circle.centerx)**2 + (rectangle.topright.y - circle.centery)**2 <= (mindist + r_circle)**2 #circle in top right quadrant of rectangle
)
당신이 그것을 센터의 일부 사각형 한쪽에 이상이 될 것입니다 무엇을 의미합니까 충분해야한다? 중심은 항상 반대쪽 두 모서리 사이의 거리가 같은 점으로 정의됩니다. 플레이어가 겹칠 때 발사하기를 원한다면 직사각형이 충돌 할 때를 확인하십시오. ['if rect1.colliderect (rect2)'] (https://www.pygame.org/docs/ref/rect. html # pygame.Rect.colliderect). 또는 rect x 픽셀을 더 크게 확장 한 다음 충돌을 확인할 수 있습니다 (https://www.pygame.org/docs/ref/rect.html#pygame.Rect.inflate). –
나는 그것을 팽창시키는 것에 대해 생각하지 않았다. 그것이 효과가있는 것처럼 보인다. 나는 두 개의 긴 마른 직사각형이있는 경우 거리가 중심으로부터 떨어져 있기 때문에 서로 x 거리 이내에 나타나기 전에 서로 충돌 할 것임을 의미했습니다. 팽창은 비록 그것을위한 좋은 해결책처럼 보입니다. – user3529201