2017-02-01 1 views
0

기본적으로 저는 파이 게임 (pygame)으로 게임을 만들고 있어요. 스크린 주위를 돌아 다니는 직사각형이있을 것입니다. 1 번 선수와 2 번 선수. 플레이어 1의 유닛 중 하나가 플레이어 2의 유닛의 x 거리 이내이면 화재가 발생합니다. 내가 중심에서 멀어지면,이 직사각형의 일부가 한쪽면에서 훨씬 길어지고 해고되는 범위 내에있을 것이기 때문에 정확하지 않을 것이다. 그러나 중심은되지 않을 것이다. 나는 검색을 해왔지만이 문제에 대한 해결책을 찾지 못했습니다.파이 게임; 2 개의 직사각형상의 임의의 점 사이의 최단 거리가 x 양보다 작은 지 확인?

편집 : 삭제 된 서클. 나는 서클도 가질 것이지만, 나는 그들을 직사각형처럼 다루고 그들의 .rect를 사용할 것이다. 그것들은 작고 2 픽셀의 부정확성은 중요하지 않습니다.

+0

당신이 그것을 센터의 일부 사각형 한쪽에 이상이 될 것입니다 무엇을 의미합니까 충분해야한다? 중심은 항상 반대쪽 두 모서리 사이의 거리가 같은 점으로 정의됩니다. 플레이어가 겹칠 때 발사하기를 원한다면 직사각형이 충돌 할 때를 확인하십시오. ['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). –

+0

나는 그것을 팽창시키는 것에 대해 생각하지 않았다. 그것이 효과가있는 것처럼 보인다. 나는 두 개의 긴 마른 직사각형이있는 경우 거리가 중심으로부터 떨어져 있기 때문에 서로 x 거리 이내에 나타나기 전에 서로 충돌 할 것임을 의미했습니다. 팽창은 비록 그것을위한 좋은 해결책처럼 보입니다. – user3529201

답변

0

이것은 내가 지금 생각할 수있는 최선의 것입니다. 사각형의 모서리와 원의 중심을 비교합니다. 그 정도면 충분하지 않은 경우 사각형 모서리를 따라 중심점을 추가하면됩니다.

아니 완벽한 솔루션,하지만 당신이 작성하는 게임에 따라서는

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 
     ) 
+0

메이트, 기능을 매우 환영합니다! – math2001

+0

변경되었습니다. 감사합니다. – Hans

+0

두 개의 사각형 사이의 거리를 확인하는 데는 사각형과 원을 인수로 사용하지 않습니다. 원래 게시물에서 더 명확하게 설명해야합니다. 나는 방금 직사각형과 같은 원을 다루고 그것을 사용하여 distace를 확인합니다. 동그라미는별로 중요하지 않을 정도로 작습니다. – user3529201

관련 문제