如何管理深度与Texture2D的很多层
本文关键字:Texture2D 深度 何管理 管理 | 更新日期: 2023-09-27 17:50:41
在我的游戏中,我必须管理许多对象。每个对象都有Depth
值,该值将在调用其绘制函数时使用。
每个对象都是用层系统创建的:
Layer1: obj1 - obj2 - obj3 - obj4
Layer2: obj1 - obj2 - obj3 - obj4
Layer3: obj1 - obj2 - obj3 - obj4
Layer4: obj1 - obj2 - obj3 - obj4
ecc.
一个层只是一个对象列表。
我的问题是如何管理每一层的每一个深度。
从更高的层次看,Layer1位于Layer2、Layer3、Layer4之上;Layer2是Layer1的底部,但在Layer3,Layer4的顶部。所以,考虑到draw调用中的Depth值是介于0和1之间的值,我只是为每个关卡分配了一个从0开始的值,到1,步骤0.01。这样我将有最多100个图层。
现在我需要在层内定义深度顺序,所以对于每个对象:Layer1。obj1位于obj2、obj3、obj4之上,但也位于Layer2之上。其中obj1 Layer2。methoda ecc .
我怎样才能做到这一点?
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 batch管理图层的对象。
你可以进一步细分0.01的深度增量。
或者你可以简单地使用绘制顺序来决定在其他事物上绘制什么?