Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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 - Fatal编程技术网

C# XNA中的混合态

C# XNA中的混合态,c#,xna,C#,Xna,我很难想出如何在XNA中做一些事情。 我有这样的想法: public void Draw() { spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend); DrawFirstObject(); // Depth = 0.5f spriteBatch.End(); spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendSt


我很难想出如何在XNA中做一些事情。 我有这样的想法:

public void Draw()
{
     spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend);
     DrawFirstObject();    // Depth = 0.5f
     spriteBatch.End();

     spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.Additive);
     DrawSecondObject();    // Depth = 0.2f
     spriteBatch.End();
}

基本上,我需要有两个不同的spritebatch开始调用一个是AlphaBlend,另一个是Additional BlendState。但问题是,当我这样做时,第二次调用中绘制的对象总是绘制在第一次调用的顶部,而不是在它们需要的位置后面。我无法重新格式化代码,因此第二个调用位于顶部,我需要保持深度顺序。如果你有任何建议,我将不胜感激

当您在第一次
Draw
调用中使用透明图像时,最好使用
SpriteSortMode.BackToFront


为什么不能重新订购代码?如果要进行alpha混合,必须首先绘制透明对象后面的对象。没有(简单的)方法可以解决这个问题。我不能重新排序我的代码,因为例如,我有一个tilemap对象,它绘制需要使用alpha blend的瓷砖,并且我绘制不同深度的瓷砖,我称之为添加绘制,并绘制一些粒子。这些粒子必须位于某些分片的上方和后面,但它们被绘制在所有分片的上方。然后,如果遇到状态更改,基本上需要对分片和粒子进行深度排序,并动态发出
spriteBatch.Begin()
。可能可以优化此排序过程以使状态变化最小,但这取决于场景。