【发布时间】: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