我使用玩家自己的精灵在他下面的地板上创建动态阴影。在Monogame中Spritebatch的Alpha混合问题
角色的当前动画帧被垂直翻转,垂直压扁,并在他下方以黑色部分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范围内,但大多数价值似乎产生纯黑色(全不透明度),除非我把它降到约.05f或更低。此时,我获得了部分透明度,但结果显示为灰色(较少饱和度),而不是黑色(较暗)。例如,在灰色的表面上,根本没有阴影。
它似乎像spriteBatch是使用AdditiveBlend代替的AlphaBlend,但我肯定它设置为α和只设置一次:
spriteBatch.Begin (SpriteSortMode.Immediate, BlendState.AlphaBlend);
什么也很有趣的是,如果我的颜色设置为颜色。白色(而不是黑色),透明度看起来很正常(如反射),没有扭曲的颜色。
Monogame处理Alpha透明度与XNA不同吗?
UPDATE:
我试图创建一个通用的,黑色的,椭圆形阴影,并与Color.White *透明度绘制它。这也导致了一个灰色的阴影(而不是背景变暗),驳斥了我之前关于Color.White的理论。似乎游戏中的所有部分透明度都是作为添加剂而不是alpha处理的。