2013-10-24 2 views
0

개체가 다른 개체와 충돌 할 때 개체를 중지하려고합니다. 내 말은 사용자가 다른 곳에 밀어 넣으려고하면 내 개체가 미끄러지 길 바라지 만 잠시 동안 넘어 가지 않기를 바랍니다. Xna와 직사각형 충돌 기능을 사용하고 있습니다. 다른 개체에서 슬라이딩 할 때의 충돌

public void Update(GameTime gametime) 
     { 
      Currentposition = Station.Position; 
      Station.Update(); 
      coli = IsHit(ListObs[16].ShapeO, Station.Shape); 
     } 

public void Draw(SpriteBatch spritebatch) 
{ 
      if (coli == true) 
      { 
       Station.Position = Currentposition; 
       Station.Draw(spritebatch); 
      } 
      else 
      { 
       Station.Draw(spritebatch); 
      } 
} 

그 순간 작동하지, 난 시어 또는 bOx2DX 사용을 시도 할 수 있습니다하지만 난 (내가 t 중력 필요 "돈) 내게는 너무 깊이 생각합니다.

public bool IsHit(Rectangle r1, Rectangle r2) 
     { 
      if (((r1.X + r1.Width >= r2.X) && (r1.X <= r2.X + r2.Width)) && ((r1.Y + r1.Height >= r2.Y) && (r1.Y <= r2.Y + r2.Height))) 
       return true; 
      else 
       return false; 
     } 

답변

0

을 내가하지 여기 IsHit 알고 있지만 것은 내가 사각형의 충돌을 감지하는 방법입니다 BoundingRect이

+0

thats ishit Metod가하는 것, 나는 그것을 더한다. – Gabson

+0

하지만 지금 정확히 무엇이 작동하지 않습니까? 충돌 감지 또는 스테이션 위치? – Schminitz

+0

@ Gabson 독자적으로 구현하는 대신 기본 방법을 사용하는 것이 좋습니다. – pinckerman

0

모든 XNA 사각형입니다

if (source.BoundingRect.Intersects(target.BoundingRect)) 
{ 
    ... 
} 

당신이 일반적으로 알아야 할 것이다 :

우리는 큐브를해야합니까 ...

경우 :

mesh.BoundingSphere 

내가 더 잘 예를 들어 ... 예를 들어, 당신에게 그것을 설명 할 수 당신이 벽까지의 거리를 알고, 당신도 경계 상자 만들 수 있습니다 최소 엄마 :

float d// middle distance <- > wall 
Vector3 center = mesh.BoundingSphere.Center ; 
var box = new BoundingBox (new Vector3 (Center.X - d Center.Y - d Center.Z - d) , new Vector3 (Center.X + d + d Center.Y , Center.Z + d)) ; 

지금 당신은 당신의 큐브를 포함하는 경계 상자가을 (부자 Vector3이 경계 ximum). 이상적으로는 프로그램 시작시 한 번만 계산할 수 있습니다.

이제 기본 ...라고

당신은 당신이 마지막으로 당신이 원하는대로 회전, trannformation 등을 추가해야합니다 기술을 prgramming 향상

...

하지만 당신의 큐브에있는 경우 회전, 그것은 이미 복잡합니다. 대신 큐브가 회전 할 때마다 경계 상자가 사용되므로 행렬을 사용합니다. 경계 상자가 항상 다시 계산되는 것을 보았을 때 발생하는 문제는 주사위가 더 이상 경계 상자에 해당하지 않지만 최악의 경우 경계 상자의 벽 중간에 큐브의 모서리가 모두 맞고 충돌이 없었음에도 불구하고 충돌로 간주되는 많은 "공기"가 경계 상자에 있습니다. 경계 상자는 축에 대해 항상 방향이 지정되고 큐브는 방금 회전됩니다. 이 문제를 피하기 위해 충돌시 테스트하려는 경우 매트릭스를 사용하여 방의 큐브 백축을 가져옵니다 (충돌 테스트를 위해 역행렬을 반전시킨 회전으로).

이를 이해하고 사용할 수있었습니다 경우 개체가 당신이 원하는 목적지까지 어떻게 같이 이동하게 할 수있을 것입니다)


난 당신이 나에 시도한 무엇을 이해 바랍니다 설명;)

관련 문제