C# XNA中不同屏幕的深度缓冲区
我不太明白如何处理程序中不同屏幕的ZBuffering。我有一个C# XNA中不同屏幕的深度缓冲区,c#,xna,buffer,depth,C#,Xna,Buffer,Depth,我不太明白如何处理程序中不同屏幕的ZBuffering。我有一个screenControllers类,它为我的每个活动Screen类调用一个Draw方法。spriteBatch.Begin和spriteBatch.End调用在screenController的绘图中进行。对于正在绘制的每个纹理,屏幕的绘制只有一个spriteBatch.Draw语句。我知道我可以在调用 public void Draw ( Texture2D texture, Rectangle destin
screenControllers
类,它为我的每个活动Screen
类调用一个Draw方法。spriteBatch.Begin
和spriteBatch.End
调用在screenController
的绘图中进行。对于正在绘制的每个纹理,屏幕的绘制只有一个spriteBatch.Draw
语句。我知道我可以在调用
public void Draw (
Texture2D texture,
Rectangle destinationRectangle,
Nullable<Rectangle> sourceRectangle,
Color color,
float rotation,
Vector2 origin,
SpriteEffects effects,
float layerDepth
)
public-void-Draw(
纹理2D纹理,
矩形目标矩形,
可为空的sourceRectangle,
颜色,
浮动旋转,
矢量2原点,
精神效应,
浮动层深度
)
spriteBatch
的方法
但假设我打开一个屏幕,屏幕上的纹理在一定深度。然后,我打开的第二个屏幕应该具有与上一个屏幕相同深度值的其他纹理,但在上一个屏幕上按顺序绘制。我怀疑我是否需要这个功能,因为我打开的第二个屏幕可能是场景窗口顶部的选项屏幕,所有东西都在前面,或者它可能是界面的一部分,不在场景窗口顶部,而是在侧面。我只是想知道XNA是否可以实现多屏幕的分层功能?如果您使用不同的SpriteBatch
来管理它们,我认为您不会遇到这种问题
如果使用相同的SpriteBatch
,则可以使用scaleFactor
和offsetValue
来管理Draw
的layerDepth
值,以便为每个sceen的screenDepth
参数创建不同的inverval
我的意思是,如果有两个屏幕,第一个屏幕的纹理以[0,0.5)
间隔绘制,第二个屏幕以[0.5,1)
间隔绘制。如果有三个屏幕,间隔将为每0.33,依此类推
scaleFactor
当然将是1/numberOfScreens
。管理不同的SpriteBatch是什么意思?对每个屏幕使用不同的开始/结束调用,而不是screenController中的全局调用或不同的绘制方法?对于第一个选项,您的意思是如果我有3个深度(0.3,0.5,0.9)的纹理一个屏幕和两个纹理(0.4,0.7)在第二个屏幕上,如果我在第一个屏幕之后绘制第二个屏幕,那么所有的第二个屏幕纹理都会以正确的顺序出现在第一个屏幕上?我认为这两个东西都适合我写的东西。无论如何,我没有试过这样的东西,但你明白我的意思。是真的吗?我不明白使用sc的意思同一个spriteBatch的aleFactor和offsetValue。为什么纹理的比例会随着屏幕数量的增加而减小?但是,如果您认为使用不同的sprite begin/end命令可以正确地将其分层,我会尝试一下。对不起,我对xna还是新手……我的意思是,您应该缩放layerDepth
值,而不是e纹理,以便为每个screenController创建不同的layerDepth
间隔。例如,在您只有两个screenController的情况下,后面的屏幕应定义[0,0.5)
间隔中的每个绘图,前面的屏幕应具有[0.5,1)
用于第二层。在这种情况下,scaleFactor
为0.5(因为您有两个screenController),offset
第一个为0,第二个为0.5。您可以用您喜欢的任何方式进行管理,我只是想告诉您如何实现这一点。