Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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_Xna 4.0 - Fatal编程技术网

C# XNA将混合状态从α改为添加剂

C# XNA将混合状态从α改为添加剂,c#,xna,xna-4.0,C#,Xna,Xna 4.0,这是我的问题 我正在使用深度控制,但现在我有不同的精灵,需要不同的混合状态 如果我已经启动了spritebatch.begin(…),如何更改此设置 我试图更改spritebatch.graphicsDevice.blendstate,但它似乎不起作用 我无法将黑色区域变为透明 多谢各位 似乎仍然无法通过使用该代码保存它们之间的层顺序 我想问题可能在于使用object.draw(spritebatch)然后在方法内部绘制。 我认为这是一个问题,因为我有两个类,每个类都有一个带有输入spriteb

这是我的问题 我正在使用深度控制,但现在我有不同的精灵,需要不同的混合状态 如果我已经启动了spritebatch.begin(…),如何更改此设置

我试图更改spritebatch.graphicsDevice.blendstate,但它似乎不起作用

我无法将黑色区域变为透明

多谢各位

似乎仍然无法通过使用该代码保存它们之间的层顺序
我想问题可能在于使用object.draw(spritebatch)然后在方法内部绘制。
我认为这是一个问题,因为我有两个类,每个类都有一个带有输入spritebatch的draw方法
这就是我所做的

spriteBatch.Begin(SpriteSortMode.FrontToBack、BlendState.Additional)
d、 抽绳攻击(游戏时间,斯皮特巴特)
spriteBatch.End()

spriteBatch.Begin(SpriteSortMode.FrontToBack,BlendState.AlphaBlend)
drawObjects(游戏时间、spriteBatch)
charactersDraw(游戏时间,精灵拍击);//与d.drawAttack相同的类
spriteBatch.End()

他们两个都画,但层!在两个雪碧之间!似乎没什么区别

layerdepth可以很好地处理角色和绘制对象。。。仅对drawAttack不起作用

您需要执行多个SpriteBatch.Begin()。。End()调用。您仍然可以将图层保留在其中的第三层

例如:

batch.Begin(SpriteSortMode.FrontToBack, BlendState.Additive);
batch.Draw(tex1, sprite1, null, Color.White, 0.0f, Vector2.Zero, 1.0f,
SpriteEffects.None, layer1);
batch.Draw(tex2, sprite2, null, Color.White, 0.0f, Vector2.Zero, 1.0f,
SpriteEffects.None, layer2);
batch.End();

//new blend state, new begin...end
batch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend);
batch.Draw(tex3, sprite3, null, Color.White, 0.0f, Vector2.Zero, 1.0f,
SpriteEffects.None, layer3);
batch.Draw(tex4, sprite4, null, Color.White, 0.0f, Vector2.Zero, 1.0f,
SpriteEffects.None, layer4);
batch.End();

您是否像我的示例中那样使用layerDepth参数?使用FrontToBack,较低的层值(如0.3f)将显示在较高层值(如0.9f)的前面。在一些线程和论坛之后,我想我可能必须预先计算每个对象的深度,然后绘制所有对象(如列表)?????绘制对象时,使用函数计算my layerDepth。图层深度可以很好地处理对象和角色。。。唯一的问题是在SpriteBatch(使用d.drawAttack)之间,也许有一种方法可以替换图像的黑色背景并使用alphablend绘制它?好吧,这是一个单独的问题。您可以通过在内容项目中选择纹理图像,展开“内容处理器”,然后展开“颜色键颜色”。默认为粉红色。把这个做成黑色(0R,0G,0B)。确保“颜色键已启用”也为真。重建你的项目,你的黑色应该变成alpha。我正在使用这个免费的精灵

,我已经尝试过这个方法,不知怎的,它让黑色环绕着它。我想可能是另一种黑色,但事实并非如此
我读了一些关于预乘alpha的资料,并试图更改参数
我还找到了一些其他精灵,我可以用它们来代替,但这并不能解决我的问题。。。只能避免:)黑色可能不是纯黑色(0,0,0)。在图像编辑器中查看,找出背景的颜色。将其用作颜色键。