[英]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.