C#Monogame - 预乘alpha

时间:2015-08-01 21:11:38

标签: c# fadein monogame

我需要淡入淡出效果才能在屏幕之间进行过渡。我在网上看到,不推荐使用XNA 3进行alpha混合的旧方法,并且应该使用XNA 4的预乘alpha。所以我使用的是Monogame,我假设代码是相同的,但你能解释一下这个预乘的alpha吗?另外一个与我自己的代码兼容的代码示例会很棒!这里有一些:

// Variables
private Texture2D image;
private Vector2 imagePosition;
private Color startColour;
private Color endColour;
private float alpha;

// Constructor
public myClass()
{
    startColour = new Color(0.0f, 0.0f, 0.0f, 0.0f);
    endColour = new Color(255.0f, 255.0f, 255.0f, 255.0f);
    alpha = 0.0f;
}

// Update method
public void Update(GameTime gameTime)
{
    // ??????
}

// Draw method
public void Draw(SpriteBatch spriteBatch)
{
    spriteBatch.Begin();
    spriteBatch.Draw(image, imagePos, startColour * alpha); // ???
    spriteBatch.End();
}

我相信大部分代码都在那里,但我仍然需要更新alpha,将其从0更改为1,或者你是如何从白色淡化?我想从白色褪色到不透明。那你怎么做的?我的Update()方法应该包含哪些代码,如何更改当前代码?

1 个答案:

答案 0 :(得分:1)

这应该很简单,如果我理解你正试图从白色变为空白。

public myClass()
{
    ...
    alpha = 1.0f; // I'm almost sure that 1 means solid
}    

public void Update(GameTime gameTime)
{
    if (alpha > 0.0f) alpha -= 0.01f;
}

考虑到每帧调用Update(),默认情况下每秒默认60次(在当前的单一游戏版本中),因此您必须调整0.01f的小数位置才能使其成为尽可能快。

此外,您可以使用Color.White * alpha中的spriteBatch.draw。而且你需要在绘制"窗帘"之前(上方)调用所有要出现的图画。