在DirectX中,可以将D3DXSPRITE参数设置为两者的组合:
D3DXSPRITE_SORT_DEPTH_BACKTOFRONT
和
D3DXSPRITE_SORT_TEXTURE
意味着精灵首先按其图层深度排序,然后按照它们所在的纹理排序。我试图在XNA中做同样的事情,但我遇到了一些问题。我试过了:
SpriteBtch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.BackToFront & SpriteSortMode.Texture, SaveStateMode.None);
但它不起作用,似乎只是在纹理排序中执行它们,忽略纹理图层深度。难道我做错了什么!?或者甚至不可能?
答案 0 :(得分:1)
SpriteSortMode是枚举,应使用|组合操作者:
SpriteSortMode.BackToFront | SpriteSortMode.Texture
更新:,如this article所述,XNA无法实现您的方案:
按深度排序和排序 纹理是互斥的
答案 1 :(得分:1)
可能的解决方案:
定义一个表示要绘制的精灵的新对象
class Sprite
{
public float Priority { get; set; } // [0..1]
public String TextureName { get; set; }
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(TextureName, ..., Priority); // here Priority is useless because of the sort mode.
}
}
然后添加一个“sprite to draw”列表:
因此,在您的Main类中,您将拥有:
private List<Sprite> spritesToDrawThisTick = new List<Sprite>();
每次打勾,你: