2014-11-08 92 views
1

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

回答

0

經過一番實驗,我意識到這隻發生在字符陰影,而不是任何其他透明的精靈。

我最終將問題縮小到了我的編程中的一個邏輯錯誤,即每幀對character_draw函數進行多次調用。任何在該函數中繪製的alpha透明度都會被粘貼多次,從而導致不透明度極高的敏感度,以及我所看到的明顯的疊加(或變灰)效果。