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".
绘图之前(上方)出现的所有内容的绘图
我需要一个淡入淡出的效果来在我的屏幕之间转换。我在网上读到 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".