2014-08-31 5 views
0

SharpDx.Toolkit (XNA) 게임을 쓰고 있습니다. 나는 어떻게 충돌 감지를 프로그래밍하는 인터넷에서 검색하고, 나는이를 발견했습니다회전 된 스프라이트로 충돌 감지 SharpDX

static bool perPixel(Rectangle rectangleA, Color[] dataA, Rectangle rectangleB, Color[] dataB) 
     { 
      // Find the bounds of the rectangle intersection 
      int top = Math.Max(rectangleA.Top, rectangleB.Top); 
      int bottom = Math.Min(rectangleA.Bottom, rectangleB.Bottom); 
      int left = Math.Max(rectangleA.Left, rectangleB.Left); 
      int right = Math.Min(rectangleA.Right, rectangleB.Right); 

      // Check every point within the intersection bounds 
      for (      
       int y = top; y < bottom; y++) 
      { 
       for (int x = left; x < right; x++) 
       { 
        if (dataA[(x - rectangleA.Left) + (y - rectangleA.Top) * rectangleA.Width] != new Color(0, 0, 0, 0) && dataB[(x - rectangleB.Left) + (y - rectangleB.Top) * rectangleB.Width] != new Color(0, 0, 0, 0)) 
        { 
         // Get the color of both pixels at this point 
         Color colorA = dataA[(x - rectangleA.Left) + 
              (y - rectangleA.Top) * rectangleA.Width]; 
         Color colorB = dataB[x - rectangleB.Left) + 
              (y - rectangleB.Top) * rectangleB.Width]; 

         // If both pixels are not completely transparent, 
         if (colorA.A != 0 && colorB.A != 0) 
         { 
          // then an intersection has been found 
          return true; 
         } 
        } 
       } 
      } 

      // No intersection found 
      return false; 
     } 

이 코드는 잘 작동하지만 비 회전 스프라이트에. 그래서 매트릭스 변환을 추가하려고했지만 작동하지 않습니다.

아무에게도 아이디어가 있습니까, 어떻게해야합니까?

는 기독교

EDIT 감사 :이 게임은 2D 게임입니다.

+0

픽셀 충돌 당 실제로 필요합니까? –

답변

1

대부분의 경우 픽셀 단위의 충돌이 과도하게 발생하므로 프로그래밍 실습 이외에는 권장하지 않습니다.

거의 항상 버그를 유발하고 성능이 떨어지는 충돌을 찾기 위해 다른 방법을 적용 할 수 있습니다.

물리 엔진을 사용하거나 다른 방법을 사용할 수 있습니다.

내가 귀하의 경우 잘 작동 생각 어떤 방법 :

  1. OBB - OBB 충돌
  2. 원 - 원 충돌 경계가 대신 교차하는 경우 당신은 그냥 확인 이러한 방법으로

각 픽셀을 서로 비교하여 검사합니다.