【问题标题】:XNA changing blendstate from alpha to AdditiveXNA 将混合状态从 alpha 更改为 Additive
【发布时间】:2012-01-27 20:49:37
【问题描述】:

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

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

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

谢谢

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

spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.Additive);
d.drawAttack(gameTime, spriteBatch);
spriteBatch.End();

spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend);
drawObjects(gameTime, spriteBatch);
charactersDraw(gameTime, spriteBatch); // 与 d.drawAttack 相同的类
spriteBatch.End();

他们都画但图层!在两个 spritebatch 之间!似乎没有任何区别
layerdepth 适用于字符和绘制对象...仅不适用于 drawAttack

【问题讨论】:

    标签: c# xna xna-4.0


    【解决方案1】:

    您需要执行多个 SpriteBatch.Begin() .. End() 调用,each with a different BlendState。您仍然可以在其中保留您的 layerDepth。

    例如:

    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)之前。
    • 在一些主题和论坛之后,我想我可能必须预先计算每个对象的深度,然后绘制所有对象(如列表)??????我的 layerDepth 是在绘制对象时使用函数计算的。图层深度适用于对象和字符...唯一的问题是 spriteBatchs(使用 d.drawAttack)之间,也许有一种方法可以替换图像的黑色背景并用 alphablend 绘制它?
    • 好吧, 是一个单独的问题。您可以通过在 Content 项目中选择纹理图像,展开“Content Processor”,然后展开“Color Key Color”来做到这一点。默认为粉红色。将其设为黑色(0 R、0 G、0 B)。确保“启用颜色键”也为真。重建你的项目,你的黑色应该变成 alpha。
    • 我正在使用这个免费的精灵
      ironstarmedia.co.uk/wp-content/uploads/2009/12/…
      我已经尝试过这种方法,不知何故它保持了黑色。我虽然可能是另一种黑色,但事实并非如此。
      我阅读了一些关于预乘 alpha 的内容并尝试更改参数。
      我还发现了一些其他可以使用的精灵,但这并不能解决我的问题......只能避免它:)
    • 黑色可能不是纯黑色 (0, 0, 0)。在图像编辑器中查看它并找出背景是什么颜色。使用它作为颜色键。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多