XNA中不同屏幕的深度缓冲区

时间:2013-11-16 14:54:33

标签: c# xna buffer depth

我不太明白如何处理程序中不同屏幕的 ZBuffering 。我有一个screenControllers类,为每个活动的Screen类调用Draw方法。 spriteBatch.BeginspriteBatch.End调用是在screenController的抽奖中进行的。对于每个正在绘制的纹理,Screen的Draw只有一个spriteBatch.Draw语句。我知道我可以在调用

时指定深度
public void Draw (
     Texture2D texture,
     Rectangle destinationRectangle,
     Nullable<Rectangle> sourceRectangle,
     Color color,
     float rotation,
     Vector2 origin,
     SpriteEffects effects,
     float layerDepth
) 

spriteBatch的方法。

但是我说在某个给定的深度打开一个带有纹理的屏幕。然后,我打开的第二个屏幕应该具有与前一个相同的深度值的其他纹理,但是在前一个屏幕的TOP上依次绘制。我怀疑我将需要这个功能,因为我打开的第二个屏幕可能是我的场景窗口顶部的选项屏幕,前面的一切都可能是一个界面的一部分,它不在场景窗口的顶部,而是在侧。我只是想知道这个多屏幕的分层功能是否可以在XNA中实现?

1 个答案:

答案 0 :(得分:0)

如果您使用不同的SpriteBatch来管理它们,我认为您不会遇到此类问题。

如果您使用相同的SpriteBatch,则可以使用scaleFactoroffsetValue来管理layerDepth的{​​{1}}值,以便为每个sceen的Draw参数创建不同的invervals。

我的意思是,如果您有2个屏幕,则screenDepth间隔中会绘制第一个纹理,[0, 0.5)中的第二个纹理。如果你有3个,则间隔为0.33,依此类推......

[0.5, 1)当然是scaleFactor