2013-09-13 3 views
-1

XNA에서 엉망이되어 문제가 발생했습니다. 48 * 48 스프라이트를 가지고 있는데, 스프라이트의 왼쪽 위 코너로 게임 세계에서 그 위치를 추적 할 수 있습니다.
나는 사각형을 회전시키고 여전히 같은 지점을 추적 할 수 있기를 원합니다. 예를 들어 시계 방향으로 90도 회전하고 원본 X 위치가 200 인 경우 새 X 위치는 200 + 48 (이미지 너비의 크기)이어야합니다. 90도를위한 그 벌금은 나의 머리에서 그것을 해결할 수있다. 그러나 중간에 각 하나는 문제 다!
아마 이런 종류의 공식이있을 것입니다.
도움이 될 것입니다. 오 광장이 그 중심에서 회전하고 있습니다.Tracking Rotating Sprite

난 그냥 당신이 왼쪽 상단 모서리를 사용할 수 없습니다 움직이는 회전 스프라이트를 추적해야하는 경우 spriteBatch.Draw()

 spriteBatch.Draw(animations[currentAnimation].Texture, 
      Camera.WorldToScreen(WorldRectangle), 
      animations[currentAnimation].FrameRectangle, 
      color, rotationScale , new Vector2((float)frameHeight/2, (float)frameWidth/2), effect, TileMap.characterDepth); 
+0

스프라이트를 그린 코드를 보여주세요. –

답변

0

를 사용하지만, 그 중심 있어요. 이미 중심을 사용하여 스프라이트를 회전하여 회전시킵니다.

Draw 호출의 두 번째 매개 변수가 Rectangle이고, 대신 Vector2 위치를 사용하는 것이 문제입니다.

0

3D 그래픽 라이브러리 위에 응용 프로그램을 구축하고 있습니다. 3D 그래픽 라이브러리는 이러한 종류의 문제를 해결하는 데 매우 유용합니다! 작은 작업으로 나누어 라이브러리가 당신을 위해 일하게하십시오. 먼저

: 그것은 당신이 모형 공간에서 작업 할 때 오히려 세계 공간보다 이러한 질문에 대해 생각하는 가장 쉬운 방법. 즉, 회전 지점이 절대적으로 어디에 있는지 걱정할 필요가 없습니다. 변환되지 않은 모델 (이 경우에는 회전 또는 변환이없는 스프라이트)과 관련하여 어디에 위치하는지 걱정하면됩니다.

그렇다면 어디입니까? 단순 :

원점은 스프라이트의 중심이므로 모델 공간에서 스프라이트 중심은 (0, 0)이됩니다. 즉, 스프라이트의 왼쪽 위 모서리는 음수 x 방향의 스프라이트 너비의 절반이고 음수 y 방향의 스프라이트 높이는 절반입니다.

이제 원하는 변형을 나타내는 개체를 만듭니다. 그렇게,

var transformedPt = Vector3.Transform(pt, transformation); 

이 모형 공간에서 여전히 기억

var transformation = Matrix.CreateRotationZ(MathHelper.ToRadians(90f)); 

은 이제 원래의 지점으로 변환을 적용 : 당신은 XNA에 내장 된 방법을 사용하여 회전 행렬을 생성하여이 작업을 수행 할 수 있습니다 세계 좌표계를 가져와 월드 공간으로 변환해야합니다 :

var transformedWorldX = transformedPt.X + spritePosition.X; 
var transformedWorldY = transformedPt.Y + spritePosition.Y; 

그리고 거기에 가야합니다.