Xna 定义两种SpriteSortMode?
在DirectX中,可以将D3DXSPRITE参数设置为以下两种参数的组合:Xna 定义两种SpriteSortMode?,xna,sprite,Xna,Sprite,在DirectX中,可以将D3DXSPRITE参数设置为以下两种参数的组合: D3DXSPRITE_SORT_DEPTH_BACKTOFRONT 和 D3DXSPRITE_SORT_TEXTURE 这意味着精灵首先按其层深度排序,然后按其所在的纹理排序。我正试图在XNA做同样的事情,我遇到了一些问题。我试过: SpriteBtch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.BackToFront & SpriteSortMode
D3DXSPRITE_SORT_DEPTH_BACKTOFRONT
和
D3DXSPRITE_SORT_TEXTURE
这意味着精灵首先按其层深度排序,然后按其所在的纹理排序。我正试图在XNA做同样的事情,我遇到了一些问题。我试过:
SpriteBtch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.BackToFront & SpriteSortMode.Texture, SaveStateMode.None);
但它不起作用,似乎只是在纹理排序中进行,忽略了纹理层深度。我做错什么了吗!?或者甚至不可能?是一个枚举,应该使用|运算符组合:
SpriteSortMode.BackToFront | SpriteSortMode.Texture
更新:如前所述,您的场景在XNA中不可能:
按深度排序和按深度排序
纹理是相互排斥的
一种可能的解决办法:
定义表示要绘制的精灵的新对象
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.
}
}
然后添加一个“要绘制的精灵”列表,您可以:
private List<Sprite> spritesToDrawThisTick = new List<Sprite>();
private List spritesToDrawThisTick=new List();
每一个滴答声,你:
谢谢,但那真的,真的是垃圾,因为这是DirectX可以做和确实做的事情,而xna不能(好主意,我想我会更详细地研究它。“简单”的解决方案似乎就是按顺序绘制精灵,并尽可能多地在代码中对它们进行批处理。虽然有些笨拙,但确实可行。