动画教程(五)

弹性运动

一维坐标上的弹性运动

需要一个变量来保存弹性的数值,可以认为这个数同距离的比例,较大的弹性值会使弹性运动显得十分僵硬。较小的弹性值会使弹性运动像一条松
紧带。通常选用 0.1 作为弹性值(spring)。
加速度与距离成正比,也就是距离乘以spring的值。
把加速度加到速度向量中。 
vx += ax; 
ball.x += vx;
每次的加速度随着物体越接近目标,变得越来越小,但是速度向量仍在不断增涨。
虽然涨幅不像启初那样快,但是速度却越来越快。几次过后,物体就超过了目标点,此时距离就为负,将这一部分加入速度向量中,物体就会慢下来。


弹性运动模拟一个类似弹簧的效果,唯一的问题是它永远不会停止。由于小球每次摇摆时的距离相同(应该是牛顿第一定律),所以速
度向量也相同,这样它就会以同样的速度来回摆动。这时,我们需要引入摩擦力。
只需要一个 friction 变量,值为 0.95。放在类开始的地方作为成员变量,每次将 vx 乘以 friction。
即:
Number = targetX - ball.x;
Number = dx * spring; 
vx += ax; 
vx *= friction;
ball.x += vx; 


二维运动既是在其中加入了 y 轴的运动。


鼠标跟随:将原来的坐标变成鼠标位置即可。


加入重力:在每帧的vy中加入重力。
vy += gravity;


多目标点弹性运动
一个物体受到多种外力。如果每种力都是加速度,我们只需要把它们一个个都加到速度向量中去。


弹簧复位(目标偏移)
要寻找目标点,首先要找到物体与固定点之间的夹角,然后沿这个角度从固定点向外展开一段长度——弹簧的长度
运行结果是,物体向着固定点运动,但会在与目标点相差一段距离时停止移动。


弹簧链接多个物体
两个物体之间由一根弹簧连接。其中一个运动了,另一个物体就要向该物体移动过来。
物体 A 以物体 B 作为目标,并向它移动。物体 B 反过来又以物体 A 作为目标。事实上,本例中目标偏移起了重要的作用。
如果一个物体以其它物体直接作为目标,那么它们之就会相互吸引,最终聚集在一个点上。通过使用偏移目标,我们就可以使它们之间保持距离,
运动开始的时候,首先,求出距离和角度,再计算目标点,然后向目标点运动。第二次调用函数时,参数相反,两个小球交换
位置,开始的小球向另一个小球运动。小球之间唯一的约束就是彼此保持一定的距离。


总结:缓动是比例运动,而弹性是比例速度。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值