Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XNA中不同屏幕的深度缓冲区_C#_Xna_Buffer_Depth - Fatal编程技术网

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

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

我不太明白如何处理程序中不同屏幕的ZBuffering。我有一个
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。您可以用您喜欢的任何方式进行管理,我只是想告诉您如何实现这一点。