我不太明白如何处理程序中不同屏幕的 ZBuffering 。我有一个screenControllers
类,为每个活动的Screen
类调用Draw方法。 spriteBatch.Begin
和spriteBatch.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中实现?
答案 0 :(得分:0)
如果您使用不同的SpriteBatch
来管理它们,我认为您不会遇到此类问题。
如果您使用相同的SpriteBatch
,则可以使用scaleFactor
和offsetValue
来管理layerDepth
的{{1}}值,以便为每个sceen的Draw
参数创建不同的invervals。
我的意思是,如果您有2个屏幕,则screenDepth
间隔中会绘制第一个纹理,[0, 0.5)
中的第二个纹理。如果你有3个,则间隔为0.33,依此类推......
[0.5, 1)
当然是scaleFactor
。