我需要淡入淡出效果才能在屏幕之间进行过渡。我在网上看到,不推荐使用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()
方法应该包含哪些代码,如何更改当前代码?
答案 0 :(得分: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
的小数位置才能使其成为尽可能快。
此外,您可以使用Color.White * alpha
中的spriteBatch.draw
。而且你需要在绘制"窗帘"之前(上方)调用所有要出现的图画。