2010-07-11 4 views
1

몇 가지 2D 스프라이트가 일부 3D DrawableGameComponents를 폐색하고 싶습니다. 단순화 된 예를 들어 일시 정지 메뉴 (2D 스프라이트로 구현 됨)는 일시 중지 된 우주선 (3D 게임 구성 요소로 구현 됨) 위에 그려야합니다.SpriteBatch 그리기 호출 전에 XNA DrawableGameComponents를 그려 Sprite를 DrawableGameComponents 위에 그릴 수 있습니까?

XNA 프레임 워크는 Microsoft.Xna.Framework.Game 및 Microsoft.Xna.Framework.DrawableGameComponent의 클래스 그리기 메서드를 자동으로 호출합니다. 내 경험에

, 나는 그리기 순서가 있음을 발견하고있다 :

  1. 게임 그리기() 메소드
  2. DrawableGameComponent이 (그리기) 방법을

내의 SpriteBatch 무승부 메서드 호출은 무승부입니다 내 Game 클래스의 메소드. 따라서 우주선은 일시 중지 메뉴 상단에 그려져 읽을 수 없게됩니다.

내 문제를 해결하는 가장 간단한 방법은 그리기 메서드가 호출되는 순서를 반대로하는 것입니다. 이것이 가능한가?

DrawableGameComponents의 DrawOrder를 다른 값 (1000, 1, 0, -1, -1000)으로 설정하려고 시도했지만 Game 및 DrawableGameComponent 인스턴스간에 XNA 프레임 워크 Draw() 메서드 호출 순서에 영향을주지 않습니다. .

SpriteBatch Draw 메서드 호출의 layerDepth를 조사했지만 Game 및 DrawableGameComponent 클래스 간의 XNA Framework 그리기 순서와 관련이없는 것처럼 보입니다. 레이어 깊이 만 SpriteBatch의 스프라이트에 영향을 미치는 것 같습니다.

저는 XNA를 처음 사용했지만 프레임 워크를 너무 많이 묻고 있습니다. 이 경우 3D 오브젝트 위에 2D 오브젝트를 배치하는 일반적인 방법은 무엇입니까?

도움을 주시면 감사하겠습니다.

답변

3

내가 XNA를 사용하기 때문에 잠시이 있었다,하지만 난 당신이 전에 또는 도면 로직 후이 통화를 시도 할 수 귀하의 Game 클래스의 Draw() 방법에 base.Draw() 전화, 당신의 DrawableGameComponents을 반복 할 것으로 판단하여 Draw 방법은 호출을 수행 할 순서에 따라 다릅니다.

+0

맞음! 나는 그 base.Draw()가 DrawableGameComponent Draw() 메소드를 호출하고 있다는 것을 몰랐습니다. 드로잉 로직 위로 base.Draw() 메서드를 호출하면 드로잉 순서가 고정되었습니다. 고맙습니다. –

관련 문제