2010-12-04 53 views
1

我想通过图层深度排序图形(即SpriteSortMode.BackToFront),但也可以通过SpriteSortMode.Immediate(我的理解是绘制的最后一件东西绘制在其他东西之上)排序它们。是否有可能为SpriteBatch.Begin结合多个SpriteSortMode?

我想要这种行为的原因是,如果我在同一图层深度绘制两个精灵,我绘制的最后一个被放在顶部。现在它只是随机的渲染在顶部,什么不是(我认为它类似于z战斗)。

我已经试过这样:

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

但它没有工作...

回答

2

不是办法你这样做。 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

前段时间我在游戏中遇到了类似的问题。我解决了这与安德鲁罗素的答案类似。我认为我有轻微的偏移量(类似0.0000001f)。我正在开发一个基于图块的游戏,并且我在y维上为每个单元添加了一个偏移单位。通过这种方式,应该绘制在后面的精灵被正确绘制。

相关问题