在前一篇文章《AEJoy —— 彻底搞懂 AE 各种 loop* 表达式【一】》,我们讲解了 loopIn/loopOut 在不同 numKeyframes 的情况下的一些区别,但是 type 类型都是默认的 cycle,那么这篇文章则来辨析一下它们在不同 type 下会产生哪些变化。
首先,我们来看一下 type 支持的几种类型的定义
cycle(默认) | 简单重复特定的关键帧片段 |
pingpong | 前后往复地重复指定的关键帧片段 |
offset | 重复特定的关键帧片段,但每次循环的偏移量(比如位置)是根据片段开始和结束时的属性值(比如速度)的差 乘以 该段循环的次数来计算得到。 |
continue | 不重复指定的片段,但会根据第一个或最后一个关键帧的速度继续动画属性。例如,如果一个图层的缩放属性的最后一个关键帧是100%,那么这个图层将继续以100% 的缩放持续到关键帧的出点,而不是直接循环回到出点。此类型不接受关键帧或持续时间参数。 |
接下来,我们来看看这四种类型实际的效果分别是怎么样的。
numKeyframes = 0 的情况下,效果如图
从下图也可以看出 Position 是随着时间周期性 “起伏” 的
numKeyframes = 1 的情况下,效果如图
也和我们上一篇文章所解释的那样, loopOut 是从最后一帧开始,逆向再找 numKeyframe 个关键帧,彼此之间进行循环。
loopIn 在 numKeyframes = 0 的情况下,也是在第一个关键帧之前进行 “往复” 的循环,直到到达最后一个关键帧,才终止运动
我这里由于人为得将第一个关键帧设置的位置如下图,所以只来回了两次半。实际的效果会因为您的设置不同而产生一些差异。
当 numKeyframe = 1 时,起伏的范围不再是所有关键帧,而是在第一个和第二个关键帧之间进行循环,即 1 和 numKeyframe + 1。然后,和之前一样也是在最后一个关键帧的 Position 停止了运动。
值得注意的是,小车运动的起始位置并不是第一个关键帧所在的位置,原因我在上一篇文章《AEJoy —— 彻底搞懂 AE 各种 loop* 表达式【一】》也提过,是时间没有整除的关系。
在 numKeyframes = 0 时,如下图所示,当小车到达最后一个关键帧后,会重新以第一个关键帧的速度进行循环,同时位置还不断累加,直到超出屏幕区域。
速度的周期循环如下图白线所示,红线是对应的位置曲线
在 numKeyframes = 1 时,小车在到达了最后一个关键帧后,会仍然保持最后一个关键帧的速度继续前进,直到超出屏幕区域。
为了更进一步对比,我们再看看 numKeyframes = 2 时的情况,即最后一个关键帧和倒数第二个关键帧的速度之间进行循环。同样,小车还是继续前进,直到超出屏幕区域位置。
在 numKeyframes = 0 时,如下图所示,在第一个关键帧以前的 Position 都超出了屏幕位置,所以小车是不显示的,直到时间到达了第一个关键帧,然后小车才会出现,并继续往前,接着当时间到达了最后一个关键帧,小车则停止运动。
速度的周期循环如下图白线所示,红线是对应的位置曲线
在 numKeyframes = 1 时,明显位置曲线 “起伏” 的幅度较小,因为该片段的起始速度和结束速度,都是第一个关键帧的速度(如上侧的白线虚线所示),所以位置的变化可以视作匀速递增。
同样,为了更进一步对比,我们再看看 numKeyframes = 2 时的情况,即第一个关键帧和第二个关键帧的速度之间进行循环。由于速度的差异,所以位置的变化也略有 “起伏”
由于 type 为 continue 时,不允许使用 numKeyframes,所以情况十分简单了。
这里使用的是最后一个关键帧的速度来进行位置更新(最后小车就超出了屏幕区域)
这里使用的是第一个关键帧的速度来进行位置更新(小车从屏幕左侧区域进入,刚开始不可见)
(未完待续)