我如何解决排序问题:
1. 创建 IDisplay 接口并将其添加到每个处理显示的类中Draw(SpriteBatch batch)
2. 创建一个DisplayManager
包含Add
, Remove
,Draw
方法和任意数量的layers
(IDisplay 对象列表)的类。就个人而言,中间层是我整理我的东西的层。所以我可以把东西放在排序的对象后面,放在排序的对象之前。
3. 在Main
处理绘图的类中,调用DisplayManager's Draw
函数,该函数将遍历layers
(Lists) 和item,并在每个item 上IDisplay
调用该函数。Draw
spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend);
DisplayManager.Draw(spriteBatch);
spriteBatch.End();
然后在 DisplayManager 中:
public static void Draw(SpriteBatch batch){
for (i = 0; i < bottom.Count; i++)
{
bottom[i].Draw(batch);
}
//Gets the model from the IDisplay item, and then it's Y position, and orders
//the sort layer(list) by that.
sort = sort.OrderBy(o => o.getModel.Position.Y).ToList();
for (i = 0; i < sort.Count; i++)
{
sort[i].Draw(batch);
}
for (i = 0; i < top.Count; i++)
{
top[i].Draw(batch);
}
}