更新sprite的alpha作为Scale增加

时间:2013-09-20 04:07:14

标签: c# windows-phone-8 xna monogame

我有一个精灵,在动画期间大小从0.6f变为2.0f。

与此同时,我希望它的alpha值随着比例的增加从1.0f变为0。因此,精灵在0.6f处是完全不透明的,并逐渐消失,直到大小为2.0f,它变得完全透明。

如何关联这些值?

2 个答案:

答案 0 :(得分:0)

spriteBatch.Draw(texture, Vector2.Zero, Color.White*alpha,null,0f,origin,scale,1f);

哪里

  alpha = MathHelper.Clamp(0, 1 , 1 - (scale - startScale)/deltaScale);

在你的情况下

 startScale = 0.6f,deltaScale = 2.0f-0.6f = 1.4f;

答案 1 :(得分:0)

如果您单独为每个值设置动画,它将更容易,更易于扩展。在这种情况下,缩放和alpha,但相同的逻辑可以应用于任何东西。

动画是时间的函数,因此您在此处缺少的变量是您希望动画持续多长时间。

每个动画都有一个startValue和一个endValue。从那里你可以得到'每秒变化'这样:

var changePerSecond = (endValue - startValue) / totalSeconds;

然后在每个帧中,您只需通过乘以帧时间(deltaTime)来增加所需的属性,例如

scale += changePerSecond * deltaTime;

好的,通过基本概念,您可以看到它如何适用于动画中的比例和alpha(以1秒动画为例)。

var scalePerSecond = (2.0f - 0.6f) / 1.0f;
var alphaPerSecond = (0.0f - 1.0f) / 1.0f;

然后在你的更新方法..

scale += scalePerSecond * deltaTime;
alpha += alphaPerSecond * deltaTime;

请注意,这是一个最简单的线性动画示例,用于演示概念。您可能需要其他代码来检测动画的结束以及完成时要执行的操作。