簡體   English   中英

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 您需要調用“窗簾”圖形之前(上方)出現的所有圖形。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM