AE里loop表达式的区别和选用
首先我们来看一下从AE里截出来的图:
从图中可知AE中给出的loop表达式分为以下四种(注意区分大小写):
loopIn(type="cycle", numKeyframes=0)
loopOut(type="cycle", numKeyframes=0)
loopInDuration(type="cycle", duration=0)
loopOutDuration(type="cycle", duration=0)
但是这些远远不止,因为type又分为cycle、pingpong、offset、continue四种,下面我们来一点一点分解这个表达式↓
解释点1:loop方式
loop方式包括loopIn、loopOut、loopInDuration、loopOutDuration四种
1、loopIn:循环表达式作用的时间段为从图层入点一直到图层的最后一个关键帧(循环在所有关键帧之前),循环从图层入点开始播放,要循环的段由numKeyframes的值指定。
2、loopOut:循环表达式作用的时间段为从图层的第一个关键帧一直到图层出点(循环在所有关键帧之后),循环从图层第一个关键帧开始播放,要循环的段由numKeyframes的值指定。
3、loopInDuration:循环表达式作用的时间段为从图层入点一直到图层的最后一个关键帧(循环在所有关键帧之前),循环从图层入点开始播放,要循环的段由duration的值指定。
4、loopOutDuration:循环表达式作用的时间段为从图层的第一个关键帧一直到图层出点(循环在所有关键帧之后),循环从图层第一个关键帧开始播放,要循环的段由duration的值指定。
其实这里只用分为loopIn和loopOut两种就行了,分别对应了循环在前和循环在后。
解释点2:type
type分为cycle、pingpong、offset、continue四种
以下均以loopOut为例子,渐变色指示动画的进行方式。
1、cycle:重复指定段。cycle是默认也是最基础的循环,可以理解为重复之前的动作。
2、pingpong:重复指定段,向前和向后交替进行。pingpong也就是乒乓球的意思,打过来打过去,可以理解为循环的往复交替。
3、offeset:重复指定段,但整个过程会产生偏移,相当于后面的循环接在前面循环的结束处重复循环过程而不是恢复到循环的起始状态(cycle)或结束状态(pingpong)。例循环方式是向右偏移200px,进行两次循环后最终结果将偏移400px,在第一个循环基础上继续向右偏移了200px。
4、continue:不重复指定段,基于第一个(loopIn)或最后一个关键帧(loopOut)的速度和状态继续动画的进行,此类型没有numKeyframes或duration参数,直接写作如loopIn("continue")
解释点3:numKeyframes和duration
numKeyframes和duration分别指示了确定循环段的两种方式,一种是按关键帧循环的numKeyframes,另一种为按时间循环的duration。
1、numKeyframes指要循环的关键帧数量,默认值0表示所有关键帧都要循环,其他的数字指以第一个关键帧(loopIn)或最后一个关键帧(loopOut)和numkeyframes+1个关键帧为区间进行循环,如loopIn("cycle",3)表示以第一个关键帧和第四个关键帧之间的区域为循环的部分;loopOut("cycle",3)表示以最后一个关键帧和倒数第四个关键帧之间的区域为循环的部分。
2、duration与numKeyframes类似,只是从关键帧变成了时间,指定的范围从第一个关键帧或最后一个关键帧开始计算,0表示循环的区域从图层入点/出点开始(包含没有关键帧作用的部分),其他数字表示循环动画的第几秒/最后几秒。如loopInDuration(“cycle”,1)表示循环第一个关键帧之后的第1秒,loopOutDuration(“cycle”,1)表示循环从最后一个关键帧之前的1秒。
此处需要注意的是↓
loopInDuration/loopOutDuration不识别numKeyframes,就算你写作loopOutDuration("cycle",numKeyframes=2),虽然AE不报错,但仍然按照loopOutDuration("cycle",duration=2)执行。
后记:
以上循环都只在关键帧后或关键帧前产生,如果我们想关键帧前和关键帧后都产生循环的话,可以这么写表达式:
例:
if (time <= key(1).time) loopIn("cycle");
else loopOut("cycle");
好像没啥用,了解一下也好。
因为是纯理论的分析,所以对这种实践性的问题最好还是打开自己的AE一个一个试来得快。顺便我这里做了个图方便理解消化。
最后还是要发福利的,这里提供自动添加wiggle、smooth、和loop表达式的脚本,在懂得了loop表达式的基础之后就能很方便地添加表达式啦!