c# – Sprite Batch不会改变Alpha

我遇到了SpriteBatch没有使用指定的“Trail”的修改后的Alpha进行绘制的问题.

我正在尝试做的是“淡化效果”,其中“项目”的alpha减少,以便它变得更透明,直到它最终被破坏.但是它不会改变alpha吗?

alpha确实减少但颜色的alpha值没有被修改,它保持相同的颜色然后消失

这是发生的事情:
http://dl.dropbox.com/u/14970061/Untitled.jpg

这就是我要做的事http://dl.dropbox.com/u/14970061/Untitled2.jpg

这是我目前正在使用的相关代码的剪切.

spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
for (int i = 0; i < Trails.Count; i++)
{
    Trail Item = Trails[i];
    if (Item.alpha < 1)
    {
        Trails.RemoveAt(i);
        i--;
        continue;
    }

    Item.alpha -= 255 * (float)gameTime.ElapsedGameTime.TotalSeconds;
    Color color = new Color(255, 0, 0, Item.alpha);
    spriteBatch.Draw(simpleBullet, Item.position, color);
}
spriteBatch.End();

最佳答案 如果您不需要,请不要使用NonPremultiplied!保留为AlphaBlend.阅读
Premultiplied Alpha及其如何是
added in XNA 4.0.

解决问题的正确方法是在颜色上使用乘法运算符:

Color color = Color.Red * Item.alpha/255f;

或者使用等效的Lerp函数将其插值为透明度:

Color color = Color.Lerp(Color.Red, Color.Transparent, Item.alpha/255f);

(另外,如果您确实将混合状态更改为非预乘,为了更正,您必须更改内容导入,而不是预先设置纹理,并确保您的内容在其透明边缘周围具有可混合数据.)

点赞