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