C# Monogame - 预乘 alpha

C# Monogame - premultiplied alpha

我需要一个淡入淡出的效果来在我的屏幕之间转换。我在网上读到 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() 方法中应该包含什么代码,我应该如何更改当前代码?

这应该很简单,如果我理解正确的话,你正试图从白到无。

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的小数位调整为想怎么快就怎么快。

您也可以在 spriteBatch.draw 中使用 Color.White * alpha。并且您需要调用 "curtain".

绘图之前(上方)出现的所有内容的绘图