临摹到后面,发现需要将方块转变成原点,而之前的方块是用钢笔绘制的路径,不方便变成圆点,所以干脆重新做了。
rotation依然是:
thisComp.layer("control").transform.rotation+ (index-2)*6
Opacity依然添加表达式:
scr = transform.anchorPoint[0]; n = 30; m = 80; if(scr<=n){transform.opacity = 0; }else{ transform.opacity = ease(scr, n, m, 0 ,100);}
1、改进
之前方框为了和六边形切割出来的方形重合,用钢笔勾出来一个方形,并非正四边形,而是长方形,这里利用添加Polystar,并将Type改为Polygon的方式建正多边形,将Points改为4,则有了一个正四边形。
后面要将方形变为圆形,可以改大Points,或者改大Outer Roundness。
之前用scale控制方框大小,改为用Outer Radius。
为了方便控制,继续给之前用做控制的名为“control”的null添加slider control,命名为“Polygon size”,和Out Radius相互关联,用以控制方块的大小。
给Outer Roundness也添加一个滑块控制,为后面变形动画做准备。
准备工作:给名为“control”的null添加slider control,命名为“zoom”,并key好动画,这里是希望这个圆组成之后,还继续有一个内缩的动画。这也是比之前的动画改进的地方。
添加一个合成的标记点,注释为“reduce”。这里要写的表达式就在这里用,没有粘贴复制到其他地方的需求,就不写判断是否有标记点的条件语句了。
Anchor Point的表达式改为:
seedRandom(index, true); strtTime = random(1); endTime = strtTime + .5; strtReduce = thisComp.marker.key("reduce").time+ strtTime/2; endReduce = thisComp.marker.key("reduce").time + .5; decay = 1; minRadius = thisComp.layer("control").effect("minRadius")("Slider"); maxRadius = thisComp.layer("control").effect("maxRadius")("Slider"); zoom = thisComp.layer("control").effect("zoom")("Slider"); zoomOut = linear(time, strtTime, endTime, 0, maxRadius); zoomIn = easeOut(time, endTime, endTime + decay, 0, maxRadius - minRadius); zoomRing = linear(time, strtReduce, endReduce, 0, 100); zoomTwo = easeOut(time, strtTime*2 + .5, endTime + 1, 0, minRadius); y = value[1]; if(time > strtTime){ if(index%3 == 0){ if(time < endTime){ x = value[0] +zoomOut; }else if(time >= endTime){ x = value[0] + maxRadius - zoomIn - zoom - zoomRing; } }else{ x = value[0] + zoomTwo - zoom - zoomRing; } }else{ x = value[0]; } [x,y]
前面写了三个表达式(其实就两个,有两个只又一点参数差别),这里多了一层条件判断,将几个表达式合在了一起。
多的一层判断是:如果所在图层的index能够被3整除,则会有先发射到屏幕外(maxRadius设置为了1100),再回来组成圆的动作;
如果所在图层的index不能够被3整除,则直接从中心点直接到达组成圆的位置。
另外的改进是,添加了一个根据标记点往内缩的动作。
2、继续改进
之前是手动选择5个小方块,添加额外的动作,那么能不能直接利用条件判断将5个点选出来?
这里slider control还是利用之间的工程,有一个名为“offset”的滑块控制,并且已经有关键帧。
先想办法选出来5个点,小方块一共60层,加上用做控制的null一共61层,从2~61的index中,有5个数能够被12整除(且同时也是能够被3整除)。
然后再在里头选出来2个数,那就是能够被24整除。
另外再加一个滑块控制最后收缩后的圆环大小。
表达式改为:
minRadius = thisComp.layer("control").effect("minRadius")("Slider"); maxRadius = thisComp.layer("control").effect("maxRadius")("Slider"); offset = thisComp.layer("control").effect("offset")("Slider"); zoom = thisComp.layer("control").effect("zoom")("Slider"); ringRadius = thisComp.layer("control").effect("ringRadius")("Slider"); seedRandom(index, true); strtTime = random(1); endTime = strtTime + .5; strtReduce = thisComp.marker.key("reduce").time+ strtTime/2; endReduce = thisComp.marker.key("reduce").time + .5; decay = 1; zoomOut = linear(time, strtTime, endTime, 0, maxRadius); zoomIn = easeOut(time, endTime, endTime + decay, 0, maxRadius - minRadius); zoomRing = linear(time, strtReduce, endReduce, 0, ringRadius); zoomTwo = easeOut(time, strtTime*2 + .5, endTime + 1, 0, minRadius); y = value[1]; if(time > strtTime){ if(index%3 == 0){ if(index%12 != 0){ if(time < endTime){ x = value[0] +zoomOut; }else if(time >= endTime){ x = value[0] + maxRadius - zoomIn - zoom - zoomRing; } }else if(index%24 == 0){ x = value[0] + zoomTwo - zoom - zoomRing - offset; }else{ x = value[0] + zoomTwo - zoom - zoomRing + offset; } }else{ x = value[0] + zoomTwo - zoom - zoomRing; } }else{ x = value[0]; } [x,y]
请登录以参与评论
现在登录