动画可以让游戏体验更流畅。这里说的动画不是指骨骼动画或者精灵动画,而是变换动画(Transition, Tweening),一般用在用户界面、特效等方面。如果没有成熟的库或者编辑器的支持,开发动画通常是一件很麻烦的事情,尤其对非线性的动画,比如:加速、缓动、指数、碰撞、弹性等。这里介绍一种实现起来甚至比线性动画更容易的一个小技巧。
让一个物体移动到目标点
有一个很简单的例子,为了让一个物体从当前位置移动到目标点,使用最简单的线性动画,我们需要在Update中加入:
Position += Vector2.Normalize(Target - Position) * Speed;
但物体不能一直移动下去,所以我们要检测物体是否到了目标来让他停下来,所以上面的代码变成了这样:
if (Vector2.Subtract(Position, Target).LengthSquared() >= Speed * Speed) Position += Vector2.Normalize(Target - Position) * Speed;
这并没有结束,因为物体的运动是离散的,你不能保证他最终正好落在的目标点,所以或许还得改成这样: