学习目标:

制作一个ae_jsx插件,把重复工作图形界面化


学习内容:

1、 弄清ae软件结构
2、 可以读写每一个节点
3、 简化工作流程并整理进插件


学习时间:

3天


学习产出:

jsx

{/*------------------------*/function YouYi(Global) {/*------------------------*/Global.RET = "\r";//-------------------------------------------------------------------------------------------- About infoGlobal.ABOUT ="ae动画, v1.00 (2020)" +Global.RET +"选择一个功能模块。" +Global.RET +"在模块面板内调整参数,找到模块提示的资产挂上。" +Global.RET +Global.RET +"作者 未来 (752523247@qq.com)" +Global.RET +Global.RET +"联系电话 (15365119616)" +Global.RET +"更多插件开发请联系 ";Global.WORKINGBTN ="使用方法:" +Global.RET +"选中图层点击按钮" +Global.RET +"调节位置关键帧";//---------------------------------------------------------------------------------------- Global VariablesGlobal.working_幅度 = 9;Global.working_频率 = 10;Global.递增数量 = 10;Global.惊讶背景_最小值 = 30;Global.惊讶背景_最大值 = 90;Global.惊讶背景_速度 = 30;Global.惊讶背景_密度 = 10;Global.惊讶背景_数量 = 50;Global.弹动一切_最大弹动幅度 = 3;Global.弹动一切_速度 = 30;Global.弹动一切_弹动次数 = 6;}/*------------------------*/function YouYiUI(UIdraw) {/*------------------------*///legend...........................('Window type', 'Name of palette', [left edge, top edge, right edge, bottom edge];try {var filepass = new File(new File($.fileName).parent);var icon = filepass.fullName + "/YouYi_Images";} catch (err) {alert("错误路径");}UIunit = 10;UIwidth = 275;UIheight = UIunit * 28;//------------------------------------------------------------------------------------- 头部主界面绘制UIdraw.main = new Window("palette", "", [0, 100, UIwidth, UIheight * 3]);UIdraw.main.name = UIdraw.main.add("statictext",[UIunit, UIunit * 1.5, UIwidth - UIunit * 17, UIunit * 3],"动画插件:");try {UIdraw.main.aboutButton = UIdraw.main.add("iconbutton",[UIwidth - UIunit * 3, UIunit - 2, UIwidth - UIunit, UIunit * 3 + 2],icon + "/logo.png"//,{ style: "toolbutton" });} catch (err) {UIdraw.main.aboutButton = UIdraw.main.add("button",[UIwidth - UIunit * 6, UIunit - 2, UIwidth - UIunit, UIunit * 3 + 2],"About");alert("欢迎使用");}UIdraw.main.add("panel",[UIunit, UIunit * 4, UIwidth - UIunit, UIunit * 4 + 3],"");//------------------------------------------------------------------------------------- 绘制走路表达式按钮{UIdraw.main.workingFDtext = UIdraw.main.add("staticText",[UIunit, UIunit * 5, UIunit * 9, UIunit * 7 + 2],"频率:");UIdraw.main.workingFD = UIdraw.main.add("editText",[UIunit * 4, UIunit * 5, UIunit * 6, UIunit * 7 + 2],Global.working_幅度);UIdraw.main.workingPLtext = UIdraw.main.add("staticText",[UIunit * 6, UIunit * 5, UIunit * 9, UIunit * 7 + 2],"幅度:");UIdraw.main.workingPL = UIdraw.main.add("editText",[UIunit * 9, UIunit * 5, UIunit * 12, UIunit * 7 + 2],Global.working_频率);UIdraw.main.workingButton = UIdraw.main.add("button",[UIunit * 12 + 4, UIunit * 5, UIwidth - UIunit * 9, UIunit * 7 + 2],"人物走路");UIdraw.main.workingAboutButton = UIdraw.main.add("button",[UIwidth - UIunit * 8, UIunit * 5, UIwidth - UIunit, UIunit * 7 + 2],"?");UIdraw.main.add("panel",[UIunit, UIunit * 8, UIwidth - UIunit, UIunit * 8 + 3],"");}//------------------------------------------------------------------------------------- 循环功能按钮//循环方式:pingpong,cycle{UIdraw.main.add("staticText",[UIunit, UIunit * 8.6, UIwidth - UIunit, UIunit * 10.6],"循环方式:");UIdraw.main.CYCLE = UIdraw.main.add("radiobutton",[UIunit * 8, UIunit * 8.6, UIwidth - UIunit, UIunit * 10.6],"cycle");UIdraw.main.PINGPONG = UIdraw.main.add("radiobutton",[UIunit * 13, UIunit * 8.6, UIwidth - UIunit, UIunit * 10.6],"pingpong");UIdraw.main.LOOP = UIdraw.main.add("button",[UIunit * 20, UIunit * 8.6, UIwidth - UIunit, UIunit * 10.6],"循环");UIdraw.main.PINGPONG.value = true;UIdraw.main.add("panel",[UIunit, UIunit * 11, UIwidth - UIunit, UIunit * 11 + 3],"");}//------------------------------------------------------------------------------------- update功能按钮//递增函数{UIdraw.main.add("staticText",[UIunit, UIunit * 11.6, UIwidth - UIunit, UIunit * 13.6],"递增参数:");UIdraw.main.递增数量 = UIdraw.main.add("editText",[UIunit * 8, UIunit * 11.6, UIunit * 11, UIunit * 13.6],Global.递增数量);UIdraw.main.单值递增 = UIdraw.main.add("radiobutton",[UIunit * 12, UIunit * 11.6, UIwidth - UIunit, UIunit * 13.6],"单");UIdraw.main.Y值递增 = UIdraw.main.add("radiobutton",[UIunit * 16, UIunit * 11.6, UIwidth - UIunit, UIunit * 13.6],"Y");UIdraw.main.X值递增 = UIdraw.main.add("radiobutton",[UIunit * 19, UIunit * 11.6, UIwidth - UIunit, UIunit * 13.6],"X");UIdraw.main.递增按钮 = UIdraw.main.add("button",[UIunit * 11, UIunit * 14.6, UIunit * 24, UIunit * 16.6],"递增函数");UIdraw.main.单值递增.value = true;UIdraw.main.add("panel",[UIunit, UIunit * 17.6, UIwidth - UIunit, UIunit * 17.6 + 3],"");}//------------------------------------------------------------------------------------- 惊讶动态背景//随即距离ab,速度s,密度{UIdraw.main.add("staticText",[UIunit, UIunit * 18.6, UIwidth - UIunit, UIunit * 20.6],"最大值");UIdraw.main.惊讶背景最大随机区间 = UIdraw.main.add("editText",[UIunit * 6, UIunit * 18.6, UIwidth - UIunit * 18, UIunit * 20.6],Global.惊讶背景_最大值);UIdraw.main.add("staticText",[UIunit * 10, UIunit * 18.6, UIwidth - UIunit, UIunit * 20.6],"最小值");UIdraw.main.惊讶背景最小随机区间 = UIdraw.main.add("editText",[UIunit * 15, UIunit * 18.6, UIwidth - UIunit * 8, UIunit * 20.6],Global.惊讶背景_最小值);UIdraw.main.add("staticText",[UIunit, UIunit * 20.6, UIwidth - UIunit, UIunit * 22.6],"速度");UIdraw.main.惊讶背景速度 = UIdraw.main.add("editText",[UIunit * 6, UIunit * 20.6, UIwidth - UIunit * 18, UIunit * 22.6],Global.惊讶背景_速度);UIdraw.main.add("staticText",[UIunit * 10, UIunit * 20.6, UIwidth - UIunit, UIunit * 22.6],"密度");UIdraw.main.惊讶背景密度 = UIdraw.main.add("editText",[UIunit * 15, UIunit * 20.6, UIwidth - UIunit * 8, UIunit * 22.6],Global.惊讶背景_密度);UIdraw.main.add("staticText",[UIunit, UIunit * 22.6, UIwidth - UIunit, UIunit * 24.6],"个数");UIdraw.main.惊讶背景数量 = UIdraw.main.add("editText",[UIunit * 6, UIunit * 22.6, UIwidth - UIunit * 18, UIunit * 24.6],Global.惊讶背景_数量);UIdraw.main.惊讶背景 = UIdraw.main.add("button",[UIunit * 11, UIunit * 22.6, UIunit * 24, UIunit * 24.6],"惊讶背景");UIdraw.main.add("panel",[UIunit, UIunit * 24.6, UIwidth - UIunit, UIunit * 24.6 + 3],"");}//------------------------------------------------------------------------------------- 标记弹动{//幅度,速度,次数UIdraw.main.add("staticText",[UIunit, UIunit * 26.6, UIwidth - UIunit, UIunit * 28.6],"幅度");UIdraw.main.弹动一切_最大弹动幅度 = UIdraw.main.add("editText",[UIunit * 6, UIunit * 26.6, UIwidth - UIunit * 18, UIunit * 28.6],Global.弹动一切_最大弹动幅度);UIdraw.main.add("staticText",[UIunit * 10, UIunit * 26.6, UIwidth - UIunit, UIunit * 28.6],"速度");UIdraw.main.弹动一切_速度 = UIdraw.main.add("editText",[UIunit * 15, UIunit * 26.6, UIwidth - UIunit * 8, UIunit * 28.6],Global.弹动一切_速度);UIdraw.main.add("staticText",[UIunit, UIunit * 29.6, UIwidth - UIunit, UIunit * 31.6],"次数");UIdraw.main.弹动一切_弹动次数 = UIdraw.main.add("editText",[UIunit * 6, UIunit * 29.6, UIwidth - UIunit * 18, UIunit * 31.6],Global.弹动一切_弹动次数);UIdraw.main.弹动一切 = UIdraw.main.add("button",[UIunit * 11, UIunit * 29.6, UIunit * 24, UIunit * 31.6],"弹动一切");}//------------------------------------------------------------------------------ 主界面功能设计UIdraw.main.center();UIdraw.main.show();{//About buttonUIdraw.main.aboutButton.onClick = function () {alert(Global.ABOUT);};//working ButtonUIdraw.main.workingButton.onClick = function () {var selected = app.project.activeItem.selectedLayers;if (selected.length == 0) {alert("请选择一个或者多个位移选项");} else {for (var i = 0; i < selected.length; i++) {var layer = selected[i];//layer.position.addKey(0.5);//layer.position.addKey(3);// alert(expressionInput);layer.position.expression ="t =0; x = position[0];y = position[1];st = position.key(1).time;et = position.key(2).time;if(time>st&&time<et){while (t <= time * 15) {y ;x ;t++}y;[x, y + Math.cos(time * " +UIdraw.main.workingFD.text +") * " +UIdraw.main.workingPL.text +"];}else{value;}";}}};UIdraw.main.LOOP.onClick = function () {var selected = app.project.activeItem.selectedProperties;if (selected.length == 0) {alert("请选择一个带有两个关键帧的属性");} else {for (var i = 0; i < selected.length; i++) {if (UIdraw.main.PINGPONG.value == true) {// alert(expressionInput);selected[i].expression ='loopOut(type ="pingpong", numKeyframes = 0)';} else if (UIdraw.main.CYCLE.value == true) {selected[i].expression ='loopOut(type ="cycle", numKeyframes = 0)';}}}};UIdraw.main.递增按钮.onClick = function () {var selected = app.project.activeItem.selectedProperties;if (selected.length == 0) {alert("请选择一个带有两个关键帧的属性");} else {for (var i = 0; i < selected.length; i++) {if (UIdraw.main.单值递增.value == true) {selected[i].expression ="x =0;t =0;while(x<=time*60){t+=" +UIdraw.main.递增数量.text +";x++}t;";} else if (UIdraw.main.X值递增.value == true) {selected[i].expression ="x =0;t =0;while(x<=time*60){t+=" +UIdraw.main.递增数量.text +";x++}[value[0]+t,value[1]];";} else if (UIdraw.main.Y值递增.value == true) {selected[i].expression ="x =0;t =0;while(x<=time*60){t+=" +UIdraw.main.递增数量.text +";x++}[value[0],value[1]+t];";}}}};UIdraw.main.惊讶背景.onClick = function () {var selected = app.project.activeItem.selectedLayers;var counter = 0;if (selected.length == 0) {alert("请制作一个90度向上的单个图形,锚点放在根部,并选中");} else {for (var i = 0; i < selected.length; i++) {var layer = selected[i];layer.position.expression ="function center(){return [thisComp.width/2,thisComp.height/2];}center();";layer.scale.expression ="seedRandom(Math.floor(time*5),true);" +" \n " +"onceRand2 = random(" +UIdraw.main.惊讶背景最小随机区间.text +"," +UIdraw.main.惊讶背景最大随机区间.text +");" +" \n " +"maxDev =onceRand2;" +" \n " +"spd = " +UIdraw.main.惊讶背景速度.text +";" +" \n " +"t = (time - inPoint);" +" \n " +"//y = scale[1]+maxDev*Math.sin(spd*t);" +" \n " +"//y=onceRand2;" +" \n " +"y = scale[1]+=maxDev;" +" \n " +"x = scale[0];" +" \n " +"[x,y]";layer.rotation.expression ="offset = " +UIdraw.main.惊讶背景密度.text +";x = rotation[0]+offset*index;";while (counter < UIdraw.main.惊讶背景数量.text - 1) {layer.duplicate();counter++;}}}};UIdraw.main.弹动一切.onClick = function () {var selected = app.project.activeItem.selectedLayers;if (selected.length == 0) {alert("选择一个需要弹动的图层,执行操作,拖动标记来决定弹动位置");} else {for (var i = 0; i < selected.length; i++) {var layer = selected[i];var myMarker = new MarkerValue("此处弹动");layer.property("Marker").setValueAtTime(2, myMarker);layer.scale.expression ="maxDev =" +UIdraw.main.弹动一切_最大弹动幅度.text +";" +" \n " +"spd = " +UIdraw.main.弹动一切_速度.text +";" +" \n " +"decay = " +UIdraw.main.弹动一切_弹动次数.text +";" +" \n " +"t = thisLayer.marker.key(1).time;" +" \n " +"if(time >=t){" +" \n " +"t = time - t;" +" \n " +"x = scale[0]+maxDev*Math.sin(spd*t)/Math.exp(decay*t)*3;" +" \n " +"y = scale[0]*scale[1]/x;" +" \n " +"[x,y];" +" \n " +"}else{value}";}}};//working use ButtonUIdraw.main.workingAboutButton.onClick = function () {alert(Global.WORKINGBTN);};}}var Global = new Object();YouYi(Global);var UIdraw = new Object();YouYiUI(UIdraw);
}

AdobeAfterEffectPlug-in_JSX_AE插件相关推荐

  1. 阅读分析程序源代码的一些方法(转载整理)

    前言 最近项目组中有较多新成员需要阅读熟悉项目中已有的程序代码,好多成员一时间对项目代码摸不清头绪,这里在网络上收集了相关源代码阅读分析的一些方法,整理于此. 正文 摘自(繁体中文Traditiona ...

  2. Alibaba代码规范插件、FindBugs插件安装及详解,IDEA插件安装,代码规范,代码查错,代码格式规范

    这是帮助开发者规范代码,培养优良的编码习惯的两个IDEA插件

  3. IDEA的Docker插件实战(Dockerfile篇)

    IDEA的Docker插件实战(Dockerfile篇) IntelliJ IDEA的Docker插件能帮助我们将当前工程制作成Docker镜像.运行在指定的远程机器上,是学习和开发阶段的好帮手,本文 ...

  4. IDEA集成Docker插件实现一键自动打包部署微服务项目

    一. 前言 大家在自己玩微服务项目的时候,动辄十几个服务,每次修改逐一部署繁琐不说也会浪费越来越多时间,所以本篇整理通过一次性配置实现一键部署微服务,实现真正所谓的一劳永逸. 二. 配置服务器 1. ...

  5. vue-devTools插件安装流程

    vue-devTools插件安装流程 本文主要介绍 vue的调试工具 vue-devtools 的安装和使用 工欲善其事, 必先利其器, 快快一起来用vue-devtools来调试开发你的vue项目吧 ...

  6. VS Code 安装 Go 插件、自定义扩展配置、断点调试

    1. 安装插件 使用快捷键 Ctrl+Shift+X 打开插件安装页面,安装 Go 插件. 2. 自定义扩展配置 使用快捷键 Ctrl+, 打开自定义配置页,编辑 settings.json ,定义与 ...

  7. VS Code 安装插件、自定义模板、自定义配置参数、自定义主题、配置参数说明、常用的扩展插件

    1. 下载和官网教程 下载地址:https://code.visualstudio.com/ 官方教程:https://code.visualstudio.com/docs 2. 安装插件 安装扩展插 ...

  8. VS Code 离线安装插件方法

    本文以离线安装 C/C++ 插件为例进说明,其它语言的插件的离线安装方法类似. 离线安装 C/C++ 插件相对比较麻烦一些,主要是因为 C/C++ 插件还依赖其他需要在线下载的组件: C/C++ la ...

  9. windows安装MongoDB环境以及在pycharm中配置可视化插件

    安装MongoDB数据库 参考这里 安装PyMongo python3 -m pip3 install pymongo指定版本 python3 -m pip3 install pymongo==3.5 ...

  10. 前端Vue学习之路(五)插件的使用

    vant插件使用 这里我们是用的语法是vue2.0 所以是 npm i vant -S 用法 1.按需引入的话 找到package.json文件 添加以下内容 plugins:[['import', ...

最新文章

  1. 应用退出前不让线程切换_用户级线程和内核级线程,你分清楚了吗?
  2. python取整数_python 取整函数
  3. java web编码详解_java web 开发 编码问题详解
  4. linux复盘:构架搭建lamp(安装)
  5. 扩展系统功能--装饰模式
  6. 5分钟快速打造WebRTC视频聊天转
  7. 文件服务器高可用群集,fastDFS文件服务器(三):集群和高可用环境篇
  8. 为什么一些机器学习模型需要对数据进行归一化?
  9. GitHub网站使用的基础入门
  10. java跳过_java跳过https证书直接请求工具类
  11. inittab文件格式
  12. autobank渗流分析计算教程_仿真百科 | 多孔介质渗流现象
  13. C++之关于初始化列表(Initialization List)的一个补充示例
  14. javascript的概述
  15. 网吧的云计算机,云电脑和网吧开启线上网咖是新趋势?
  16. IO口读写实验微型计算机,微机原理与单片机实验报告.doc
  17. 软件测试车载系统,车载软件测试
  18. 云计算时代:PC会消亡吗?
  19. web面向接口_面向未来的响应式Web开发
  20. 民宿运营经验分享:玩转自我营销,带动流量持续增长

热门文章

  1. go time Format 格式化时间的使用
  2. 小红书达人等级有哪些,达人种草力度判断
  3. Python中测试代码的介绍
  4. 分享82个HTML电子产品模板,总有一款适合您
  5. python提取关键词前后原文_python提取文本关键词
  6. 软件工程实验报告八UML建模-动态模型
  7. ros中的电机速度控制_【RosBot】控制两路步进电机-学习笔记1-Arduino中文社区 - Powered by Discuz!...
  8. JavaScript中的isNaN函数
  9. Three.js应用场景以及开发前准备工作
  10. Java5年经验字节社招:半月3次面试,成功拿到Offer