2011-08-23 2 views
1

이렇게하는 좋은 방법에 대한 제안이 있으십니까?XNA SpriteBatches - 오프셋을 그립니다.

나는 오프셋 된 위치에있는 XNA에서 많은 2D 물건을 그릴 수 있기를 원합니다. 예를 들어 뭔가가 위치 (X, Y)에 있다면 이상적으로 Draw (X, Y)가 호출 될 때 오프셋 된 것을 고려하여 (X)에 그려지는 수정 된 SpriteBatch를 전달할 수 있기를 바랍니다. + OffsetX, Y + OffsetY).

저는 아이들에게이 오프셋을 전달하고 싶지 않고 각 어린이마다 따로 따로 처리해야합니다. 그럴 경우 컴퓨터가 엉망이되어 인터페이스가 엉망이됩니다!

첫 번째로 Decorator.Draw를 위치 (X, Y)에 호출하면 SpriteBatch를 (X + offsetX, y + offsetY)로 라우트하는 SpriteBatch에 데코레이터가 있다고 생각했습니다. 그러나 SpriteBatch 클래스의 Draw 메서드를 재정의 할 수 없으며 심지어 내 자신의 "Decorator.DrawOffset"을 만든 경우에도 Decorator는 "SpriteBatch.Begin()"을 호출하고 중단되는 것으로 보이는 항목을 필요로합니다. :(

나는 Extension Methods에 대해 생각했지만 draw()가 호출 될 때마다 변수에 전달 된 오프셋이 필요하다고 생각합니까? 여전히 자녀에게 오프셋을 전달해야합니다. .

또 다른 옵션은 렌더 타겟에 아이들을 그릴 것 (또는 그들이 XNA4에 무엇이든) 다음 오프셋 위치에 화면이 렌더링 ...하지만 그 무시 무시 비효율적 인 것 같습니다?에 대한

감사합니다 다른하실 말씀 있나요!

답변

5

변환 매트릭스를 사용해야합니다.

Matrix Transform = Matrix.CreateTranslation(offsetX, offsetY, 0); 

SpriteBatch.Begin(...,...,...., Transform); 
+1

아하! 그것은 그것을하는 좋은 방법입니다. 매우 감사합니다! 흠, SpriteBatch.Begin을 이미 호출 한 경우 어떻게해야합니까? SpriteBatch.End() SpriteBatch.Begin (..., 변환) SpriteBatch.End() SpriteBatch.Begin (가 시작하는 것이 얼마나로 돌아가)보다 더 좋은 방법이 있나요? – user908588

+0

여기에 같은 질문이 있습니다. 문서에서는 Spritebatch.Begin 및 End를 Draw 루프에서 두 번 이상 호출하지 않는 것이 더 좋습니다! 그렇다면 어떻게 하나의 객체를 변형 할 수 있습니까? – Kokodoko