2010-12-04 1 views
1

레이어 깊이 (즉, SpriteSortMode.BackToFront)별로 스프라이트를 정렬하려고하지만 SpriteSortMode.Immediate로 정렬 할 수도 있습니다. (내 이해는 나머지 모든 것들 위에 그려집니다.)SpriteBatch.Begin에 둘 이상의 SpriteSortMode를 결합 할 수 있습니까?

내가이 동작을 원한 이유는 같은 레이어에 두 개의 스프라이트를 그리면 마지막으로 그린 ​​레이어가 위에 놓여집니다. 지금 당장 무작위로 렌더링되는 것은 무엇이며 무엇을하지 않습니까? (나는 z fight와 비슷한 것으로 추측합니다).

답변

2

길을 당신이 그것을하고 싶으세요 ...

SpriteBatch.Begin(SpriteSortMode.Immediate|SpriteSortMode.BackToFront, BlendState.AlphaBlend); 

그러나 그것은 작동하지 않았다 :

나는 이것을 시도했습니다. SpriteSortMode[Flags]이 아니므로 그러한 조합은 아닙니다.

원하는 효과를 얻으려는 간단한 생각은 그리는 각 스프라이트의 깊이에 덜 중요한 오프셋을 추가하는 것입니다.

spriteBatch.Draw(..., 0.5f + depthOffset); 
depthOffset += 0.0001f; 

을 그리고 그려지는 깊은처럼 끝낼 수 있습니다 : 각각 무승부 있도록 작성합니다

0.5f -> 0.5f 
0.5f -> 0.5001f 
0.8f -> 0.8002f 
0.8f -> 0.8003f 
0.6f -> 0.6004f 
0.5f -> 0.5005f 

그리고이 정렬됩니다 때, 당신은 안정적인 종류로 끝날 것입니다 (예 : 전달 된 동일한 값은 출력시 동일한 순서로 전달됩니다). 이것은 가장 큰 증가분 (즉, 최종 스프라이트의)이 원하는 깊이 값의 최소 차이보다 작은 경우에만 유효하다는 것을 명심하십시오.

1

얼마전 게임에서 비슷한 문제가 발생했습니다. 나는이 앤드류 러셀에 대한 답을 해결했다. 나는 smaler offset (0.0000001f와 같은 것)을 가지고 있다고 생각한다. 저는 타일 기반의 게임을 개발하고 있었고 y 차원의 각 유닛에 대해 하나의 오프셋 단위를 추가했습니다. 이 방법으로 뒤 따르게 될 스프라이트가 올바르게 그려졌습니다.