【问题标题】:C# Monogame - premultiplied alphaC# Monogame - 预乘 alpha
【发布时间】:2015-08-02 05:26:33
【问题描述】:

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

【问题讨论】:

    标签: c# fadein monogame


    【解决方案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的小数位,让它和你一样快想要。

    您也可以在spriteBatch.draw 中使用Color.White * alpha。并且你需要调用所有将出现在“幕”的绘图之前(上方)的绘图。

    【讨论】:

    • 您可以使用 GameTime 参数来计算增量,而不是依赖每秒 60 帧。
    • 是的,那肯定更好。虽然据我了解,更新方法不应该滞后 - 绘制应该滞后,所以这不应该造成问题。当然,您可以禁用固定 fps 或设置自己的,所以.. 是的。 :)
    猜你喜欢
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 2016-12-28
    • 2018-03-30
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 2011-06-30
    相关资源
    最近更新 更多