表达式实例

2024-09-07 15:48
文章标签 实例 表达式

本文主要是介绍表达式实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

表达式示例的在线资源

Dan Ebberts 在其 MotionScript 网站上提供了学习如何使用表达式的示例表达式和教程。例如,Dan 提供了一个有关冲突检测的精彩页面。

Colin Braley 在其网站上提供了一个教程和示例项目,其中演示如何使用表达式以一种看似自然的方式让一个图层排斥其他图层。

AE Enhancers 论坛提供了有关表达式的多个示例和许多有用信息,以及脚本和动画预设。在 AE Enhancers 论坛上的这篇帖子中,Paul Tuersley 提供了一个演示如何使用表达式成群地为多个图层设置动画的教程和示例项目。

Rick Gerard 在其网站上提供了一个示例,其中演示沿底滚动方形对象以便边线与底平面保持接触。

Carl Larsen 在 Creative COW 网站上提供了一个视频教程,其中演示如何使用表达式以及进行父处理将一组轮的旋转与车辆的水平运动相关联。

Chris Zwar 在其网站上提供了一个有关将静止图像或视频自动排列到网格中(像视频墙一样)的示例项目。您可以使用连接到一系列表达式的滑块轻松调整位置和间距。项目中有三个合成,一个用于静止,一个用于视频,一个用于创建自动情节提要,其中,视频按用户定义的间隔进行采样并且对齐到网格中。

JJ Gifford 的网站提供了多个演示如何使用表达式的示例项目。

Maltaannon (Jerzy Drozda, Jr.) 在他的网站上提供了一个视频教程,其中演示了如何通过表达式使用“将音频转换为关键帧”命令的结果创建音量计。

Harry Frank 在其 graymachine 网站上提供了一个教程,演示如何使用表达式从外部文本文件读取数据。

表达式示例:使图层旋转一圈

您可以创建表达式,而不使用其他图层中的属性。例如,您可以使图层完美地旋转一圈。

选择图层,按 P 以在“时间轴”面板中显示其位置属性,并按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (Mac OS) 属性名称左侧的秒表。
在表达式字段中输入以下内容:
1
   [(thisComp.width/ 2 ), (thisComp.height/ 2 )] + [Math.sin(time)* 50 , -Math.cos(time)* 50 ]

表达式示例:旋转时钟的钟针

您可以使用关联器关联图层之间的旋转值以便对钟针进行动画制作,当时针逐小时移动时,分针会旋转钟面的整个圆周。如果您必须为两个钟针图层设置每个关键帧,则创建此类动画将需要很长时间,但使用关联器,只需几分钟即可完成。

导入或创建两个长而窄的纯色图层:时针和分针。(请参阅 纯色图层和纯色素材项目。)
在图层结尾设置锚点。(请参阅 图层锚点。)
移动图层以便锚点位于合成的中心。(请参阅 在空间中移动图层。)
设置时针的旋转关键帧。(请参阅 设置或添加关键帧。)
选择分针的旋转属性并选择“动画”>“添加表达式”。
将关联器拖动到时针的旋转属性。将显示以下表达式:
1
   thisComp.layer( "hour hand" ).rotation
要使分针以 12 倍于时针的速度旋转,请在表达式的结尾添加  *12,如下所示:
1
   thisComp.layer( "hour hand" ).rotation* 12

表达式示例:将一个图层放置在其他两个图层之间

此示例表达式将一个图层放置在其他两个图层之间并使其保持在其间的平衡距离处。

从三个图层开始。(请参阅创建图层。)

为“时间轴”面板中前两个图层的位置设置动画。(请参阅运动路径。)

选择第三个图层,按 P 以显示位置属性,并且按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (Mac OS) 属性名称左侧的秒表   按钮。
在表达式字段中输入以下内容:
1
   (thisComp.layer( 1 ).position + thisComp.layer( 2 ).position)/ 2

表达式示例:创建一系列图像

此示例指示图层位于与“时间轴”面板中下一个更高图层相同的位置,但延迟了指定时间量(在此情况下为 0.5 秒)。您可以为其他几何属性设置类似表达式。

从缩放到大约合成大小的 30% 的两个纯色图层开始。(请参阅 纯色图层和纯色素材项目。)
为第一个图层的位置设置动画。(请参阅 运动路径。)
选择第二个图层,按 P 以显示位置属性,并且按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (Mac OS) 属性名称左侧的秒表   按钮。
在表达式字段中输入以下内容:
1
   thisComp.layer(thisLayer, - 1 ).position.valueAtTime(time - . 5 )
通过选择最后一个图层并按 Ctrl+D (Windows) 或 Command+D (Mac OS) 5 次,将最后一个图层复制 5 次。

所有图层使用同一路径,且每个比上一个延迟 0.5 秒。

Dan Ebberts 在其 MotionScript 网站上提供了用于创建图像追踪的更多示例和技术。

表达式示例:在两个图层之间创建凸出

此示例表达式将一个图层中凸出效果的 Bulge Center 参数与另一图层的位置同步。例如,您可以创建看来像在图层上方移动的放大镜的效果,当镜头(即覆盖层)移动时内容在放大镜下凸出。此表达式使用fromWorld 方法,该方法使表达式正确运行,而无论您是否移动放大镜图层或者底层图层。您可以旋转或缩放底层图层,表达式会保持不变。

您还可以将其他效果(例如波纹)与此表达式结合使用。

从两个图层开始。使一个图层成为放大镜或中间有孔的类似对象并将其命名为放大镜。(请参阅 创建图层。)
为放大镜图层的位置设置动画。(请参阅 运动路径。)
将凸出效果应用于其他图层。(请参阅 应用效果或动画预设。)
在“时间轴”面板中选择凸出效果的凸出中心属性,并选择“动画”>“添加表达式”,或者按住 Alt 键并单击 (Windows) 或按住 Option 键并单击 (Mac OS) 属性的秒表   按钮。
选择默认表达式文本并键入以下内容:
1
   fromWorld(thisComp.layer( "Magnifier" ).position)

表达式示例:基于与摄像机的距离淡化 3D 图层的不透明度

将以下表达式应用于 3D 图层的不透明度属性:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   startFade = 500 ; // Start fade 500 pixels from camera.
   endFade = 1500 // End fade 1500 pixels from camera.
   try
   { // Check whether there's a camera
       C = thisComp.activeCamera.toWorld([ 0 , 0 , 0 ]);
   }
   catch (err)
   { // No camera, so assume 50mm
       w = thisComp.width * thisComp.pixelAspect;
       z = (w/ 2 )/Math.tan(degreesToRadians( 19.799 ));
       C = [ 0 , 0 ,-z];
   }
   P = toWorld(anchorPoint);
   d = length(C,P);
   linear(d,startFade,endFade, 100 , 0 )

淡化从距摄像机 500 像素处开始,在距摄像机 1500 像素处完成。linear 插值方法用于将距离值映射到不透明度值。

表达式示例:背对摄像机时使 3D 图层不可见

将以下表达式应用于 3D 图层的不透明度属性:
1
   if (toCompVec([ 0 , 0 , 1 ])[ 2 ] > 0 ) value else 0

Dan Ebberts 在其 MotionScript 网站上说明了此表达式。

表达式示例:背对摄像机时将图层水平翻转

将以下表达式应用于 3D 图层的缩放属性:
1
   if (toCompVec([ 0 , 0 , 1 ])[ 2 ] > 0 ) value else [-value[ 0 ], value[ 1 ], value[ 2 ]]

表达式示例:在每个图层标记对缩放进行动画制作

将以下表达式应用于缩放属性以在每个标记中摆动图层:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   n = 0 ;
   t = 0 ;
   if (marker.numKeys > 0 ){
       n = marker.nearestKey(time).index;
       if (marker.key(n).time > time) n--;
   }
   if (n > 0 ) t = time - marker.key(n).time;
     
   amp = 15 ;
   freq = 5 ;
   decay = 3.0 ;
     
   angle = freq * 2 * Math.PI * t;
   scaleFact = ( 100 + amp * Math.sin(angle) / Math.exp(decay * t)) / 100 ;
   [value[ 0 ] * scaleFact, value[ 1 ] / scaleFact];

表达式示例:在特定时间开始或停止摆动

您可以使用任何表达式代替此处所用的 wiggle 表达式,以便在特定时间开始和结束任何表达式的影响。

将以下表达式应用于属性以使其在 2 秒时开始摆动:

1
2
3
4
5
6
7
8
9
timeToStart = 2 ;
if (time > timeToStart)
{
   wiggle( 3 , 25 );
}
else
{
   value;
}

将以下表达式应用于属性以使其在 4 秒时停止摆动:

1
2
3
4
5
6
7
8
9
timeToStop = 4 ;
if (time > timeToStop)
{
   value;
}
else
{
   wiggle( 3 , 25 );
}

将以下表达式应用于属性以使其在 2 秒时开始摆动并在 4 秒时停止摆动:

1
2
3
4
5
6
7
8
9
10
timeToStart = 2 ;
timeToStop = 4 ;
if ((time > timeToStart) && (time < timeToStop))
{
   wiggle( 3 , 25 );
}
else
{
   value;
}

表达式示例:将摄像机焦平面与另一图层匹配

将以下表达式应用于摄像机图层的焦距属性,以便其焦距与到名为“target”的图层的锚点的距离相匹配:
1
2
3
4
   target = thisComp.layer( "target" );
   V1 = target.toWorld(target.anchorPoint) - toWorld([ 0 , 0 , 0 ]);
   V2 = toWorldVec([ 0 , 0 , 1 ]);
   dot(V1,V2);

Dan Ebberts 在其 Motionscript 网站上详细说明了此表达式示例。

这篇关于表达式实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1145484

相关文章

Linux lvm实例之如何创建一个专用于MySQL数据存储的LVM卷组

《Linuxlvm实例之如何创建一个专用于MySQL数据存储的LVM卷组》:本文主要介绍使用Linux创建一个专用于MySQL数据存储的LVM卷组的实例,具有很好的参考价值,希望对大家有所帮助,... 目录在Centos 7上创建卷China编程组并配置mysql数据目录1. 检查现有磁盘2. 创建物理卷3. 创

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

Java实例化对象的​7种方式详解

《Java实例化对象的​7种方式详解》在Java中,实例化对象的方式有多种,具体取决于场景需求和设计模式,本文整理了7种常用的方法,文中的示例代码讲解详细,有需要的可以了解下... 目录1. ​new 关键字(直接构造)​2. ​反射(Reflection)​​3. ​克隆(Clone)​​4. ​反序列化

Python解决雅努斯问题实例方案详解

《Python解决雅努斯问题实例方案详解》:本文主要介绍Python解决雅努斯问题实例方案,雅努斯问题是指AI生成的3D对象在不同视角下出现不一致性的问题,即从不同角度看物体时,物体的形状会出现不... 目录一、雅努斯简介二、雅努斯问题三、示例代码四、解决方案五、完整解决方案一、雅努斯简介雅努斯(Janu

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处