我有一个精灵,它的大小在动画期间从 0.6f 变为 2.0f。
同时我希望它的 alpha 值随着规模的增加从 1.0f 变为 0。所以精灵在 0.6f 处完全不透明,然后逐渐消失,直到大小为 2.0f 时变得完全透明。
我如何关联这些值?
我有一个精灵,它的大小在动画期间从 0.6f 变为 2.0f。
同时我希望它的 alpha 值随着规模的增加从 1.0f 变为 0。所以精灵在 0.6f 处完全不透明,然后逐渐消失,直到大小为 2.0f 时变得完全透明。
我如何关联这些值?
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;
如果您分别为每个值设置动画,它将更容易和更可扩展。在这种情况下,规模和阿尔法,但相同的逻辑可以应用于任何事情。
动画是时间的函数,因此您在这里缺少的变量是您希望动画持续多长时间。
每个动画都有一个 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;
请注意,这是一个最简单的线性动画示例,用于演示该概念。您可能需要其他代码来检测动画的结束以及结束时的操作。