iOS 干货整理iOS动效今日看点

iOS如何构建水滴的跳动

2016-03-15  本文已影响1813人  飞机飞机

之前视觉给出了一个效果~ 需要跳动的水滴,思考了下如果是用动画去写的会调死人的。。(真.调死人的)。。 

后来思考了下,可以快速的给出一个demo  让视觉调出满意的参数我们再入手.

这是最后成型的效果

图1

//##############分割线###############//

现在我们来说下怎么做出这个效果

1:所需要的物理知识

牛顿第二定律,胡克定律

2:如何分工

在这里的我们把 水滴看成是一个有质量的球  而水面就是弹簧 (当然有人对我说 要用波动方程 算出来的水波才是最完美。。。 无奈我是学渣。。当然感谢某土豪策划的指导)

先来说下球的部分---------------------- 

图2

(这里水平方向 我们是没有阻力的 就是这样的理想情况 啦啦啦啦)

为了不让小球能飞出水面 我们要先计算好 小球开始点和结束点 以及能飞到最高点

知道了重力g 和高度h 之后 我们可以计算出 小球的整个过程所用的时间  (公式 △S=at^2 ) 可以得到

(h = gt^2)  所以可以求出 小球飞行需要的时间 t1 

(公式 V0=at  和 △S = V0t)

那么根据时间t1 可以求出垂直方向的速度 v1 = g*t1/2;

同样的也可以求出水平方向的 v2 = s/t1  

根据公式我们就很容易的获取 在某一时刻时候小球飞行达到的点了 比如在某个时间点 tx 

那么小球的 x = v2 * tx , y = g * tx^2; 小球的点就是(x,y) 

(这里需要注意下  上升和下降)

接下来说下水波的部分----------------------

图3

用图2的点 p1 的出水点 我们可以 轻松的获取p1出水点的 垂直方向的加速度 a1

(F=-k·x )  (F = ma)    (m是小球的质量  k是弹性系数) 有了这些 我们就可以求出 水波的最高点

以及水波从p1 到 最高点的 时间.  关于弹动的次数 我们可以自己随意定 (这里就不考虑阻尼了衰减次数随我们自己定义了 ) 

所以在特定的时刻 我们可以获取水波中心处于哪个位置.  当获得最高点时候 让两边的水波按sin曲线往两边算,这样就看起来是一个平滑的水波了.

(图略丑 请见谅。)

最后我们看下效果 然后就可以把demo扔给 视觉去调了

图3

下面给出demo地址 demo  (代码比较ugly  大家见谅 思路就是这样)  

上一篇下一篇

猜你喜欢

热点阅读