下面我们来介绍一下很常用的缓冲和弹跳的处理。在我们实现复杂运动时,这两种技术会处理大多种的情况。缓冲与弹跳非常均是用来处理将一个对象从已知起点移动到给定终点的技术——缓冲是指对象滑动到目标位置并停止,而弹跳是指对象做有摩擦力的弹簧振子运动。它们有一些共同点:
具体原理是缓冲的速度大小与距离成正相关,而弹跳的加速度大小与距离成正相关。
缓冲有两大类,缓冲进入到某一种与缓冲离开某一点;同时还有一些具体的运动属性,如以正弦形式缓冲,以弹跳形式缓冲等。我们主要讨论缓冲离开某点的实现,其它的后面会做简单介绍。
7.1.1 简单缓冲
简单缓冲很容易理解,下面来简单描述其实现。假设我们想把一个对象在多帧时间之内从A移动到B。我们可以计算A,B两点间的角度与距离,对速度进行正交分解,之后在每一帧的动画中重新绘制当前对象到新位置,等对象到达B点时,停止移动对象。
上面的方案很容易实现,但如果我们想让对象移动得更自然一些,这个方案就不对了。因为它指定了对象以给定的速度在运动,到达终点时立即停止,这只适合于前面我们介绍的碰撞。我们想要的是带缓冲的实现,在这种情况下,开始的运动速度非常快,随着逐渐接近目标,速度线性地减小,当到达目标位置时,速度变为0。这种简单缓冲有一种非常容易实现的逼近方案:
1. 设定一个数值(缓冲系统)用来模拟逼近我们的缓冲运动,此值与摩擦系数类似,在0和1之间。
2. 决定目标位置
3. 计算起点到终点的距离
4. 用上面设定的缓冲系数值乘以我们得到的距离,此即当前运动对象的速度
5. 在每一帧以上面得到的速度来确定物体的速度
6. 重复上述3~5步。
上面我们指定的缓冲系数可以视为距离的摩擦系数,缓冲系数越接近1,瞬时速度也越大。按上面的描述,我们仍然以小球模型来实现一个简单缓冲的例子。
缓冲处理