我使用玩家自己的精靈在他下面的地板上創建動態陰影。在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處理的。