AEJoy —— 彻底搞懂 AE 各种 loop* 表达式【一】

举报
ShaderJoy 发表于 2021/11/19 01:36:46 2021/11/19
【摘要】    前言 通过阅读本文,您将收获以下知识点 loopIn(type, numKeyframes) loopOut(type, numKeyframes) loopInDuration(type, duration) loopOutDuration(t...

 

 前言

通过阅读本文,您将收获以下知识点

  • loopIn(typenumKeyframes
  • loopOut(typenumKeyframes
  • loopInDuration(typeduration
  • loopOutDuration(typeduration

以及它们各自在不同 type 和 numKeyframes / duration 下的区别;

 

本文默认您已经具备了 AE 中关键帧(KeyFrame)的基础概念,并且以下的演示都是基于 4 个关键帧(依次从左到右)小车,如下所示

4 个关键帧,当前小车处在第三个关键帧的 Position 

 

 我们先从比较简单 loopOut 开始(loopIn 的思维稍稍有点反人类,但是转过弯来就容易理解了)

 

 loopOut

 

loopOut 的功能从最后一个关键帧开始从头(第一个关键帧)循环,直到超过你所设置的时间限制。

 首先,我们来看看 loopOut 表达式的形式,它一共由两个参数构成,第一个参数表示循环的类型(默认是 cycle 类型),第二个参数用于指示循环片段的关键帧帧数(默认是 0,意味着所有关键帧都会被循环)。

loopOut(type="cycle", numKeyframes=0)
 

1. numKeyframes = 0  

 实际的效果如图所示

loopOut("cycle", 0)

 

关键帧在 timeline 中的位置

 

 从 Position 和时间的曲线关系可知,小车从左向右的运动是周期性重复(循环所有关键帧)的,直到到达 timeline 的终点。

Position 与时间的曲线图

 

 2. numKeyframes = 1

 现在我们尝试把 numKeyFrame 设置为 1 ,看看会发生什么

loopOut("cycle", 1)

 

numKeyframes = 1

 

 从 Position 和时间的关系图中我们可以看到 loopOut 是在最后一帧和倒数第二帧之间的 Position 进行循环的,即 N 和 N - 1 的位置(这里的 N 表示关键帧总数)。

同理,我们可以大胆推论,如果 numKeyframes = 2 的话,则是 N 和 N - 2 之间进行循环

numKeyframes = 2

 上图也印证了我们的推论。

可能有的机智的读者会想:如果 numKeyframes 的值超过范围会发生什么?(即 numKeyframes >= N)

在此我先按下不表,后文稍后会提到。

 

 loopIn

 

loopIn 和 loopOut 虽然函数看起来很类似,但是作用却是截然相反,它从时间线一开始就(从最后一个关键帧的位置, 即 Position)循环,接着某一个时刻到达第一个关键帧,仍会继续执行,直到达到最后一个关键帧为止(停止循环)。

loopIn(type="cycle", numKeyframes=0)
 

 

1. numKeyframes = 0 

我们还是以 cycle 类型、numKeyframes = 0 为例,效果如下

loopIn("cycle", 0)

 

 注意关键帧在时间线上的位置,关键帧前面需要空出一段时间用于 loopIn 循环

关键帧前面空出一段时间

 

对应的 Position 曲线图如下,显然在遇到第一个关键帧之前,执行了两次循环,直到到达最后一个关键帧的 Position 就停止移动。 

Position 随着时间变化的曲线

 

但是有一点需要注意,就是如果从时间线开始到第一个关键帧的时间 ( time0),不是第一个关键帧到最后一个关键帧周期时间 (time1) 的整数倍的话(即 time0 无法整出 time1),则可能出现以下 Position 不符合预期的情况(起始位置跑到了最后一帧的 Position)

 

loopIn("cycle", 0)

 

Position 随着时间变化的曲线

 

2. numKeyframes = 1

现在我们尝试把 numKeyframes 设置为 1 试试

 

loopIn("cycle", 1)

 

从位置曲线上,我们很容易看出来,numKeyframes = 1 使得循环仅在第一个 Position 和第二个 Position 之间进行 

Position 随着时间变化的曲线

 

 感兴趣的同学可以尝试其他的 numKeyframes,我这里就不具体演示了,总结起来 numKeyframes 的作用就是 “指定进行循环的片段范围:循环片段是层中从第一个关键帧到 numKeyframes+1 关键帧的部分”,默认值 0 表示所有关键帧都循环。

理论上可以在大多数属性上使用它。但是有些例外的情况 —— 包括时间轴面板中不能用简单数值表示的属性,例如源文本属性、路径形状属性和用于级别效果的直方图属性;

太大的关键帧或持续时间值会被裁剪到最大允许值;

值太小会导致一个常量循环。

(未完待续)

文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/108512010

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。