【问题标题】:Alpha Blending Problems With Spritebatch in MonogameMonogame 中 Spritebatch 的 Alpha 混合问题
【发布时间】:2014-11-08 23:21:51
【问题描述】:

我正在使用玩家自己的精灵在他下方的地板上创建一个动态阴影。

角色的当前动画帧垂直翻转,垂直挤压,并在​​他下方绘制为黑色,部分 alpha 透明。

spriteBatch.Draw (character_sprite[character[c].sprite, 0], r_draw, r_source, Color.Black * .3f, MathHelper.ToRadians (0), v_origin, SpriteEffects.FlipVertically, 0);

这在 XNA 中看起来很棒,但是在移植到 Monogame 之后,我得到了一些奇怪的结果。

据我了解,不透明度级别应介于 0f 到 1f 之间,但大多数值似乎会产生纯黑色(完全不透明度),除非我将其降低到大约 0.05f 或更低。此时,我获得了部分透明度,但结果看起来是灰色(饱和度较低)而不是黑色(较暗)。例如,在灰色表面上,根本没有阴影。

似乎 spriteBatch 使用的是 AdditiveBlend 而不是 AlphaBlend,但我肯定将它设置为 alpha 并且只设置一次:

spriteBatch.Begin (SpriteSortMode.Immediate, BlendState.AlphaBlend);

另外有趣的是,如果我将颜色设置为 Color.White(而不是黑色),透明度看起来很正常(就像反射一样),没有扭曲的颜色。

Monogame 处理 Alpha 透明度的方式与 XNA 不同吗?

更新:

我尝试创建一个通用的黑色椭圆形阴影并使用 Color.White * opacity 绘制它。这也导致了一个灰色的阴影(而不是使背景变暗),反驳了我之前关于 Color.White 的理论。似乎游戏中的所有部分透明度都被视为加法而不是 alpha。

【问题讨论】:

    标签: c# monogame alphablending spritebatch


    【解决方案1】:

    经过一些实验,我意识到这只发生在角色阴影上,而不是任何其他透明精灵。

    我最终将问题缩小到我的编程中的一个逻辑错误,即每帧多次调用 character_draw 函数。在该函数中绘制的任何具有 alpha 透明度的东西都会被多次粘贴到自身上,从而导致异常高的不透明度敏感度以及我看到的明显的加法(或变灰)效果。

    【讨论】:

    • 遇到了同样的问题。感谢您指出正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 2019-11-11
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多