前言
通过阅读本文,您将收获以下知识点
- loopIn(
type
,numKeyframes
) - loopOut(
type
,numKeyframes
) - loopInDuration(
type
,duration
) - loopOutDuration(
type
,duration
)
以及它们各自在不同 type 和 numKeyframes / duration 下的区别;
本文默认您已经具备了 AE 中关键帧(KeyFrame)的基础概念,并且以下的演示都是基于 4 个关键帧(依次从左到右)小车,如下所示
我们先从比较简单 loopOut 开始(loopIn 的思维稍稍有点反人类,但是转过弯来就容易理解了)
loopOut
loopOut 的功能从最后一个关键帧开始从头(第一个关键帧)循环,直到超过你所设置的时间限制。
首先,我们来看看 loopOut 表达式的形式,它一共由两个参数构成,第一个参数表示循环的类型(默认是 cycle 类型),第二个参数用于指示循环片段的关键帧帧数(默认是 0,意味着所有关键帧都会被循环)。
loopOut(type="cycle", numKeyframes=0)
1. numKeyframes = 0
实际的效果如图所示
从 Position 和时间的曲线关系可知,小车从左向右的运动是周期性重复(循环所有关键帧)的,直到到达 timeline 的终点。
2. numKeyframes = 1
现在我们尝试把 numKeyFrame 设置为 1 ,看看会发生什么
从 Position 和时间的关系图中我们可以看到 loopOut 是在最后一帧和倒数第二帧之间的 Position 进行循环的,即 N 和 N - 1 的位置(这里的 N 表示关键帧总数)。
同理,我们可以大胆推论,如果 numKeyframes = 2 的话,则是 N 和 N - 2 之间进行循环
上图也印证了我们的推论。
可能有的机智的读者会想:如果 numKeyframes 的值超过范围会发生什么?(即 numKeyframes >= N)
在此我先按下不表,后文稍后会提到。
loopIn
loopIn 和 loopOut 虽然函数看起来很类似,但是作用却是截然相反,它从时间线一开始就(从最后一个关键帧的位置, 即 Position)循环,接着某一个时刻到达第一个关键帧,仍会继续执行,直到达到最后一个关键帧为止(停止循环)。
loopIn(type="cycle", numKeyframes=0)
1. numKeyframes = 0
我们还是以 cycle 类型、numKeyframes = 0 为例,效果如下
注意关键帧在时间线上的位置,关键帧前面需要空出一段时间用于 loopIn 循环
对应的 Position 曲线图如下,显然在遇到第一个关键帧之前,执行了两次循环,直到到达最后一个关键帧的 Position 就停止移动。
但是有一点需要注意,就是如果从时间线开始到第一个关键帧的时间 ( time0),不是第一个关键帧到最后一个关键帧周期时间 (time1) 的整数倍的话(即 time0 无法整出 time1),则可能出现以下 Position 不符合预期的情况(起始位置跑到了最后一帧的 Position)
2. numKeyframes = 1
现在我们尝试把 numKeyframes 设置为 1 试试
从位置曲线上,我们很容易看出来,numKeyframes = 1 使得循环仅在第一个 Position 和第二个 Position 之间进行
感兴趣的同学可以尝试其他的 numKeyframes,我这里就不具体演示了,总结起来 numKeyframes 的作用就是 “指定进行循环的片段范围:循环片段是层中从第一个关键帧到 numKeyframes+1 关键帧的部分”,默认值 0 表示所有关键帧都循环。
理论上可以在大多数属性上使用它。但是有些例外的情况 —— 包括时间轴面板中不能用简单数值表示的属性,例如源文本属性、路径形状属性和用于级别效果的直方图属性;
太大的关键帧或持续时间值会被裁剪到最大允许值;
值太小会导致一个常量循环。
(未完待续)