C# 如何使用大量纹理层管理深度2D

C# 如何使用大量纹理层管理深度2D,c#,xna,xna-4.0,C#,Xna,Xna 4.0,在我的游戏中,我必须管理很多对象。每个对象都有Depth值,在调用其draw函数时将使用该值 每个对象都使用图层系统创建: Layer1: obj1 - obj2 - obj3 - obj4 Layer2: obj1 - obj2 - obj3 - obj4 Layer3: obj1 - obj2 - obj3 - obj4 Layer4: obj1 - obj2 - obj3 - obj4 ecc. 图层只是一个对象列表 我的问题是如何管理每一层的每一个深度 从更高的层次来看,第一层位于第二

在我的游戏中,我必须管理很多对象。每个对象都有
Depth
值,在调用其draw函数时将使用该值

每个对象都使用图层系统创建:

Layer1: obj1 - obj2 - obj3 - obj4
Layer2: obj1 - obj2 - obj3 - obj4
Layer3: obj1 - obj2 - obj3 - obj4
Layer4: obj1 - obj2 - obj3 - obj4
ecc.
图层只是一个对象列表

我的问题是如何管理每一层的每一个深度

从更高的层次来看,第一层位于第二层、第三层、第四层之上;第2层是第1层的底部,但在第3层、第4层的顶部。因此,考虑到draw调用中的深度值是介于0和1之间的值,我只为每个级别指定了一个从0到1的值,步骤0.01。这样,我将有最多100层

现在我还需要定义层内的深度顺序,因此对于每个对象:Layer1.obj1位于obj2、obj3、obj4的顶部,但也位于Layer2.obj1、Layer2.obj2 ecc的顶部


我怎样才能做到这一点

您可以进一步细分深度的0.01增量

或者,您可以简单地使用绘制顺序来决定在其他事物之上绘制什么

enum LayerState : byte
{
    One,
    Two,
    Three,
    Four
}
void DrawLayer(LayerState state)
{
    switch (state)
    {
        case One:
          foreach (object obj in Layer1)
            SpriteBatch.Draw(obj);
        break;
        case Two:
          foreach (object obj in Layer2)
            SpriteBatch.Draw(obj);
        break;
        case Three:
          foreach (object obj in Layer3)
            SpriteBatch.Draw(obj);
        break;
        case Four:
          foreach (object obj in Layer4)
            SpriteBatch.Draw(obj);
        break;
     }
}

public override void Draw()
{
   SpriteBatch.Begin();
   DrawLayer(LayerState.Two) // play with states for result
   SpriteBatch.End();
   SpriteBatch.Begin();
   DrawLayer(LayerState.One) // play with states for result
   SpriteBatch.End();
   SpriteBatch.Begin();
   DrawLayer(LayerState.Three) // play with states for result
   SpriteBatch.End();
   SpriteBatch.Begin();
   DrawLayer(LayerState.Four) // play with states for result
   SpriteBatch.End();
}
如果不行,我很抱歉。只是建议一下。我认为void DrawLayer()将管理层深度取决于LayerState和sprite批次管理层对象