2011-12-21 5 views
3

경계 상자를 사용하여 스프라이트를 단색으로 표시하는 데 현재 문제가 있습니다. 충돌은 아래의 코드에서 잘 작동합니다.2D 경계 상자 충돌, 벽

위치는지도의 주요 문자 위치입니다. character2는 주인공이 충돌 할 18x28 스프라이트의 이름입니다.

주인공이 character2 스프라이트와 충돌 할 때 그에 따라 위치를 조정하려고 시도했지만 (EX : Position.X - = 1;) 교차하지 않을 때까지 내 주 스프라이트가 뒤로 밀려납니다.

나는 아주 간단한 뭔가 느낌이 있지만, 내 인생, 난 그냥 그것을 알아낼 수 없습니다.

제 질문을 요약하면 : 충돌시 character2 스프라이트가 단색으로 나타나게하려면 어떻게해야합니까? 내 주요 스프라이트는,이 무한 루프에 진입하는 if 문을 내동댕이 (0으로 속도를 줄임으로써) 충돌시 정지하는 경우에도 또한

.

 float x1 = Position.X; 
     float y1 = Position.Y; 

     float x2 = x1 + character2.Width; 
     float y2 = y1 + character2.Height; 

     BoundingBox b1 = new BoundingBox(new Vector3(x1, y1, 0), 
      new Vector3(x2, y2, 0)); 
     BoundingBox b2 = new BoundingBox(new Vector3(Position2.X, Position2.Y, 0), 
      new Vector3(x2, y2, 0)); 


     if (Collision(b1, b2)) 
     { 
      // ???? 
     } 

답변

1

그것은 당신이 정확히 어떻게하려는 작업에 따라 다르지만 하나 개의 제안이 같은 것입니다 ...

if (HorizontalCollision(b1, b2)) 
    { 
    xv = -xv; 
    } 
    else if (VerticalCollision(b1, b2)) 
    { 
    yv = -yv; 
    } 

    Position2.X += xv; 
    Position2.Y += yv; 

xvyv이 경우 속도 변수가 될 것이며, 당신은 단순히 반전하고 수평 또는 수직 충돌이있을 때의 방향. 이렇게하면 물체 나 문자가 말 그대로 서로 떨어져 튀게됩니다.

각 렌더링 루프 후 모멘텀과 마찰을 시뮬레이트 한 후 느린 속도에 대해 xv *= .99과을 추가 할 수 있습니다. 이와 같은 속도 변수를 사용하면 다양한 가능성이 열리게됩니다. 그런데 이것을 Euler integration이라고하며 애니메이션 목적으로는 매우 효율적입니다.

0
While(Collision(b1, b2)) 
{ 
    Position.X -=1; 
} 

원하는 게 맞습니까? : P

+0

방금 ​​화면이 정지됩니다. = X –