如何利用一个变量来精确控制多个变量

   最少关键帧原则

  这个原则是我在平时工作中总结出来的,“最少关键帧原则”。就是说在能完成同一动画效果的前提下,我总是乐意用尽量少关键帧去实现。就好比上一篇文章提到的,利用表达式去剔除“多余的”关键帧,尽量由一个变量来主导其他变量。这样做不仅后期修改起来得心应手,节奏上容易把控,而且整个文档也非常简练,看着心情愉快,效率自然更高。

  linear表达式介绍&用法

  子父链接,表达式属性之间的链接都可以实现由一个变量去控制多个的变量。说到链接,不得不提到表达式“linear”,它的存在为我争取了更多刷ui中国的时间,哈哈,就是说自从用“linear”,一口气做了5个需求,不费劲,谁用谁知道啊!

  同样,我们先来看看官方是如何定义“linear”的:

  插值方法(节选)

  linear(t, value1, value2)

  返回类型:数值或数组。

  参数 t 通常是 time 或 value,但它也可以采用其他值。如果 t 是 time,则值之间的插值会在持续时间内发生。如果 t 是 value,则表达式会将一系列值映射到新系列值。

  同样我们可以在表达式库中调用它:


  通过官方简单介绍你能明白“linear”是个什么东西了吗?如果你懂了,本教程到此结束。至少我当时查看的时候,以为adobe的中文版帮助文档是直接拿英文版Google翻译的。硬是没看懂啊!?

  经过九九八十一天发酵,我懂了!

  其实它一点都不复杂,顺着往下看相信大家都能学会。

  我们主要来看看这个语句,linear(t, tMin, tMax, value1, value2)。上文官方定义中提到,如果 t 是 value,则表达式会将一系列值映射到新系列值。而我们恰好就要利用这个映射功能,还记得我们的标题吗?“‘精确’控制多个变量”。

  同样拿一个小实例来帮助我们分析。

  有A,B两个圆,先对A圈的X轴方向上做位移关键帧动画,A圈从128运动到670,如下图:


  接着我们点开B圆的X位置属性(右键单独尺寸),点开表达式窗口,将其关联到A圆的X轴,如下图:


  紧接着,我们定义一个“Ax”并且让 Ax=thisComp.layer("A圆").transform.xPosition;(注意“;”相当于句号,不要忘记了)。然后再调用“linear”表达式,并改变里面的参数,具体如下图:

  Ax=thisComp.layer("A圆").transform.xPosition;

  linear(Ax,128,670,128,420)


  仔细观察“linear”后头括号中的数字,然后我们来感受一下“linear”的效果:


  看到这里我想大家都懂了吧,是不是so easy。什么!?还不明白!

   稍微改一下再看看:

  Ax=thisComp.layer("A圆").transform.xPosition;

  linear(Ax,128,300,128,620)


  (我有先把A圆的位移动画改成了128到300哦,如果不改的话,大家可以想象一下是怎么样的一种情景。)

  通过上面的实例,我们不难看出“linear”的“映射”是怎么工作的。简单的解释“linear(Ax,128,300,128,620)”,当Ax从128到300变化时,映射出128到620的值;即Ax=128时输出128,Ax=300时输出620,输出的对应值就作用到了B圆的X轴属性上了。而我们又把A圆的x轴位置属性定义给了“Ax”,所以就相当于把A圆的x轴映射给了B圆的X轴,至于具体的变化范围,就看你括号里的参数怎么定义了。

  需要注意的是映射的对象不是一对一,可以一对多;也不必需要X轴映射X轴,你可以X轴映射Y轴,甚至X轴映射透明度,缩放,旋转等等。具体怎么个射法还是得看你的tiwei,是体力,不是,是能力。总之“linear”会让你动画中的元素关系更加密切,而不是孤立的个体。

  就是这么简单实用,即学即用的映射技巧,你学会了吗?

  简单示范&思路分享

  上面实例中A圆是主导对象,由他的运动来影响B圆的运动。在很多情况下我需要选对主导对象,因为是由主导对象发起动画,一般关键帧也是打在它身上。所以要根据具体情况来分析,选对主导对象对你后面的工作影响重大。一般我都是选跟手指操作的关系最密切的对象作为主导。

  下面简单示范和分析一下我做的一些小实例,由于篇幅原因我不对细节做具体分析,方法也因人而异,旨在分享哈。

  例1:

  思路:banner的高度去映射背景图的缩放;


  例2:

  思路:侧边栏的X轴去映射首页的缩放&圆角&灰度;


  例3:

  思路:顶层的Y轴映射自己的缩放&圆角,同时映射第2,3层的y轴&缩放&圆角;


  例4:

  思路:蓝圆映射多边形的大小;绿圆映射多边形的圆度;黄圆映射背景颜色等等;


  例5:

  思路:旋钮的旋转映射数字从0变化到10&背景颜色&刻度条等等;


  例6:

  思路:第一个圆的缩放映射其他圆的缩放&投影&脚标的缩放等等;


  实例到此结束~

  希望能给大家一下小小的启发哈~

  最后


  大家想知道这个抽风圆点怎么实现吗?可是篇幅实在太长了,请听下回分解吧。

时间: 2024-10-27 03:46:42

如何利用一个变量来精确控制多个变量的相关文章

提示-eclipse怎么实现点击一个变量,它的所有变量都会显示标记出来

问题描述 eclipse怎么实现点击一个变量,它的所有变量都会显示标记出来 如题.. 解决方案 eclipse点击一个变量,使相同名称变量高亮显示eclipse点击一个变量使相同名称变量高亮显示的方法eclipse点击一个变量使相同名称变量高亮显示的方法

main static-java只有一个类,main和static 变量谁先运行?请各位指点。谢谢!

问题描述 java只有一个类,main和static 变量谁先运行?请各位指点.谢谢! import static net.mindview.util.Print.*;class Go { static String s1 = ""run""; static String s2 s3; static { s2 = ""drive car""; s3 = ""fly plane""; pr

linux shell脚本 两个变量中间有一个/ 一起输出时前面的变量出不来

问题描述 linux shell脚本 两个变量中间有一个/ 一起输出时前面的变量出不来 配置文件config.txt 内容为: abc=/home/test 计划在shell脚本中获取等号后面的路径,shell脚本如下; #!/bin/bash var=`grep abc /home/test/config.txt` #获取abc开头的一行 echo $var put_path=${put_line##*=} #截取等号后面路径 echo "${put_path}/1.txt" 可以获

visual studio 2010-VS2010 MFC一个自定义类如何调用一个对话框类中的成员变量

问题描述 VS2010 MFC一个自定义类如何调用一个对话框类中的成员变量 我从一个对话框定义了几个CString类型的edit控件,我现在写一个类想调用该对话框中的创建的edit控件变量.怎么办啊 解决方案 字符串: getdlgitem(id)->getwindowtext() 数字 getdlgitemid(id) 解决方案二: 把那个对话框的CString变量变成public的,然后就可以直接用了,当然你需要先知道你那个对话框的指针. 解决方案三: 黑马程序员---定义一个包含私有成员变

link环境下,如何获得一个变量的变量名?如何用变量名调用变量?

问题描述 link环境下,如何获得一个变量的变量名?如何用变量名调用变量? link环境下,如何获得一个变量的变量名?如何用变量名调用变量? 解决方案 看来你自己已经知道了,nameof运算符,C# 6.0新的语法. 你可以用nameof作为dictionary的key,变量作为value,这样就可以索引到变量了.

java-Java 中一个类定义的一个静态变量 被另一个类使用时 这个静态变量必须有值吗?

问题描述 Java 中一个类定义的一个静态变量 被另一个类使用时 这个静态变量必须有值吗? Java 中一个类定义的一个静态变量 被另一个类使用时 这个静态变量必须有值吗? 解决方案 可以没有值,但建议赋初始值.静态变量在类加载的时候会执行初始化操作,如果没有显式赋值,则会初始化为默认值,比如int型的就是0,bool类型的就是false,如果是对象的话,就是null,其它类调用时如果没有显式赋初始值,有可能导致逻辑问题,比如空指针异常等等. 解决方案二: Can be no value, bu

解析如何利用一个ASP.NET Core应用来发布静态文件_实用技巧

虽然ASP.NET Core是一款"动态"的Web服务端框架,但是在很多情况下都需要处理针对静态文件的请求,最为常见的就是这对JavaScript脚本文件.CSS样式文件和图片文件的请求.针对不同格式的静态文件请求的处理,ASP.NET Core为我们提供了三个中间件,它们将是本系列文章论述的重点.不过在针对对它们展开介绍之前,我们照理通过一些简单的实例来体验一下如何在一个ASP.NET Core应用中发布静态文件. 目录 一.以Web的形式读取文件 二.浏览目录内容 三.显示默认页面

PHP变量的定义、可变变量、变量引用、销毁方法

 这篇文章主要介绍了PHP变量的定义.可变变量.变量引用.销毁方法,需要的朋友可以参考下  代码如下: <?php $long="big_long_variable_name"; $$long="PHP";     /* 用存放在变量$long里的字符串作为新变量的变量名,等同于$big_long_variable_name="PHP"; */ $short=& $big_long_variable_name;  /* 取变量$bi

局部变量-循环内定义变量,和循环外定义变量的问题

问题描述 循环内定义变量,和循环外定义变量的问题 循环外定义变量 tempReportInfo public ArrayList<ReportInfo> getAllReportInfos() { ArrayList<ReportInfo> reportInfos = new ArrayList<ReportInfo>(); Cursor cursor = null; ReportInfo tempReportInfo = new ReportInfo(); synch