4. 我们要想使solid还位于默认的中央位置,就要把:
y=amplitude*Math.sin(veloc*time)/Math.exp(decay*time);
[0,y]
改成:
y=amplitude*Math.sin(veloc*time)/Math.exp(decay*time);
position+[0,y]
此时返回的[0,y]仅仅作为变化量被加到了position之上,solid还保持合成窗口的中央位置。预览。solid在y轴上作上下晃动,类似被绑在了一根水平弹簧上。效果不是很显著,我们可以改变参数,调大振幅,减小decay,增加速度。此时会比较有明显的效果。
5. 看到国外的一个这个应用,是一个从小礼盒里弹出来一个卡通人物,好像装有弹簧一样。
在这里,他把这里的表达式中的:
y=amplitude*Math.sin(veloc*time)/Math.exp(decay*time);
改成了:
y=amplitude*Math.cos(veloc*time)/Math.exp(decay*time);
变化就稍有些不同,我们都知道正弦和余弦在自变量为0时的数值是不同的,正弦是0,余弦是1,这就是为什么我们这个表达式被添加到solid上之后solid的起始位置不发生变化,因为我们用的是正弦。当我们用余弦的时候,solid或卡通人物的起始位置会有一个向下的位移,位移多少我们从表达式可以看出和振幅有关系。
因此,当用余弦时,卡通人物的位移正好可以作为藏在盒子里的这段距离,比正弦要好些。
上面是用在position上的用法。我们还可以用在缩放上。

[点击放大]
6. 上图中红圈的都是可以改变成其它全局变量的,因此大家可以想到,还可以把缩放和位移相结合,只要把scale换成position就可以了,当然这里只是举例,如果真改成position,那么就缩放的太大了,真想用之时可以用除法来减小变化范围。
我们现在就来做一个结合,不过不用position和scale,因为大家现在看完上面的估计都会做了。我们来把两个solid之间的距离和其中一个solid的缩放联系在一起。
length(point1, point2) {point1 and point2 are arrays}返回两个点之间的距离。Point 2 是optional 的。例如,length(point1, point2)和length(sub(point1,point2))是相同的。OK,新建一个comp,一个solid,缩放如第一帖那样的小块。打开3D开关,添加表达式,(方法不用说了吧):
veloc=11;
amplitude=70;
decay=.1;
y=amplitude*Math.sin(veloc*time)/Math.exp(decay*time);
position+[0,0,y]
可以发现我们最后的变化,因为打开3D开关之后,就要成为三维数组了。

[点击放大]
7. 此时的solid块在z轴上前后运动,不过运动幅度不是很大,大家看仔细了。再建一个solid,或者导入一张图片,我这里暂且建一个text。

[点击放大]
8. 打开text的3D开关,输入如图表达式:

[点击放大]
9. 此表达式中引号里面的“2”是指的solid块。拖动时间指示器,发现随着solid的前后挪动,文字开始忽大忽小,当和solid同样的水平面时,文字最小,当最靠前或最靠后的时候,文字最大,并且solid和文字层之间相互遮掩。

[点击放大]
10. 上面是solid靠后时候的,这个是最靠前的:

[点击放大]
以上仅仅是思路,效果可能并不是太好,但是我觉得,思路要比结果好点。
上面就是两个层之间的距离和缩放的结合,你可以把它和其它的来结合,思路多多,大家慢慢想。