2011-09-06 2 views
0

나는 매번 경계 사각형이 갱신되는 오브젝트 목록을 가지고 있습니다 ... 어떻게 그 중 효과적으로 반복 할 수 있습니까? 나는 이것 같이 그것을 검사하는 것이 좋다고 생각하지만 어떤 생각?xna 4.0리스트를 이용한 다중 충돌 탐지를위한 퍼 퍼링

 for (int i = 0; i < birds.Count; i++) 
     { 
      for (int j = 0; j < birds.Count; j++) 
      { 
       if (j > i) 
       { 
        if (birds[j].boundingRectangle.Intersects(birds[i].boundingRectangle)) 
        { 

           birds[i].tintColor = Color.Yellow; 
           birds[j].tintColor = Color.Yellow; 

        } 
        else 
        { 

          birds[i].tintColor = Color.White; 
          birds[j].tintColor = Color.White; 

        } 
       } 
      } 
     } 
+0

또 내 사각형을 Color.White에 반환합니다. ... ( – JML

답변

0

왜 충돌을 감지하지 못하는지 알 수 없으므로 코드는 정상적으로 보입니다. 경계 사각형의 값을 보여주는 문자열을 출력하여 올바르게 설정되었는지 또는 해당 코드를 전혀 실행하지 않거나 "birds"배열이이 코드가 실행되는 범위에서 살아남는 지 여부를 확인해야합니다. 실제 배열 대신 복사본을 수정해야 함).

for (int j = i+1; j < birds.Count; j++) 

을하고 있습니다 (> J 항상있을 것입니다 난을)를 if (j > i) 제거 할 수 있습니다

개선에 관해서는, 당신은 할 수 있습니다. 내가 추천하는 다른 사항은 for 문에 int j을 선언하지 않는 것입니다. 이 때문에, 항상 모든 i에 인스턴스화보다 외부 선언을 갖는 것이 좋습니다 : 나는 포인터를 사용 할 수있는없이이 개선을위한 더 많은 공간이 생각하지 않는다

int i, j; 
for (i = 0; i < birds.Count; i++) 
     for (j = i+1; j < birds.Count; j++) 

. 수백 개의 객체를 검사하지 않는 한, 2D 그래픽의 경우에는 메서드가 훌륭합니다.

PS : (당신이 XNA를 사용하고 뭔가 다른 상자를 경계하지 않는 한 : P) 나는 당신의 질문이 Game Development - SE 사이트에 들어갈 수 있으리라 생각

0

귀하의 문제 사각형을 비교할 때 흰색으로 새를 설정하는 것이, 이전 히트 감지로 이전에 노란색으로 설정 되었더라도 노란색으로 설정되었을 수 있지만 마지막 테스트가 실패하면 다시 설정됩니다.

각 프레임의 시작 부분 (충돌 감지 전)에서 직사각형을 흰색으로 설정하고 충돌이 발생하면 노란색으로 설정합니다 (충돌이 없으면 홀로 남겨 둡니다).

+0

힌트를 주셔서 감사합니다. 정말 도움이되었습니다 .. – JML