|
首页 | 名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
对蓝色理想经典论坛中的一篇关于“物理学的弹性”教程的分析,讲解比较清楚…… 首先,来熟悉一下弹性效果,我们这里把它理解为力,这个力拖动物体到目的地,并且当物体与目的地越远,这个力越大,就想弹簧上吊了一个物体! onClipEvent(load){ vx=1; } onClipEvent(enterFrame){ _x+=vx; } vx表示沿x轴方向的速度,_x+=vx 等于_x=_x+vx. 我们在mc每一桢都使其x坐标加上速度。测试动画,我们能看到小球匀速运动。那要是让它是变速的,怎么办?对了,我们可改变vx,让vx逐桢变换,即给它一个加速度: onClipEvent(load){ vx=1; ax=.1; } onClipEvent(enterFrame){ vx+=ax; _x+=vx; } 测试动画,我们看到小球逐渐加速。假如把vx变为5,ax该为-0.1,这时小球先减速,再反向加速。 onClipEvent(load){ tx=250; } onClipEvent(enterFrame){ // ax is a fraction of the distance from tx to _x ax=(tx-_x)*.2; vx+=ax; _x+=vx; } 现在,我们看到小球在往返跳跃,现实情况应该就像有能量损失,小球的振幅应逐渐减小。现在用k代替上式中的0.2,它就像弹簧的劲度系数;用damp=0.9表示每次振幅减小的幅度: onClipEvent(load){ tx=250; k=.2; damp=.9; } onClipEvent(enterFrame){ // ax is a fraction of the distance from tx to _x ax=(tx-_x)*k; vx+=ax; vx*=damp; _x+=vx; } 现在,你就可看到真实的弹性效果,你可改变参数damp和k;另外,如法炮制对y坐标采用同样的方式。代码如下: onClipEvent(load){ tx=250; ty=250; k=.2; damp=.9; } onClipEvent(enterFrame){ ax=(tx-_x)*k; ay=(ty-_y)*k; vx+=ax; vy+=ay; vx*=damp; vy*=damp; _x+=vx; _y+=vy; } 我们还让小球能被拖动,如下: on(press){ startDrag(""); drag=true; } on(release, releaseOutside){ stopDrag(); drag=false; } 4.回到mc的代码中,改变如下: onClipEvent(enterFrame){ if(!drag){ ax=(tx-_x)*k; ay=(ty-_y)*k; vx+=ax; vy+=ay; vx*=damp; vy*=damp; _x+=vx; _y+=vy; } } 到现在,我们用的是一个定点(250,250),我们也可把他改为鼠标的坐标,用_root._xmouse等来表示: onClipEvent(load){ k=.2; damp=.9; } onClipEvent(enterFrame){ ax=(_root._xmouse -_x)*k; ay=(_root._ymouse -_y)*k; vx+=ax; vy+=ay; vx*=damp; vy*=damp; _x+=vx; _y+=vy; } 至此,教程就算结束. 转自经典:Aero-lk 这份教程的目的是能产生出一定数量的条件下弹性效果的动作脚本提供一种起实际作用的知识。即弹性数学计算知识。从快速移动、摆动到实际上的弹性动作,这些数学知识都是基于胡克定律的,而且几乎在每本关于物理的书上都能找到该定律。 概述: 弹性动画是异常吸引人的,它能赋予物体反应、动作上的灵性。问题要害在于要对有关数学原理有一个实际的理解。你必须认识以下三个基本术语: position(p) : 位置(p) 上面三个概念在弹性动画中都有应用。你可能对这些事实异常认识了,即一根弹簧对外力有反应(例如拉伸作用),加在它身上的外力越大,那么这根弹簧的反作用力就越大。这个事实是弹性动画的基础,也就是所说的胡克定律。 弹簧反作用力是由被称为"弹性系数(k)"的常数决定的。进一步的说,在一个无摩擦的环境中,这根弹簧是永远的伸缩摆动下去的,只要一旦它被外力拉动。所以我们再引入一个"阻碍常量(c)"来限制动作慢慢的停下来。因此,下面就是我们要使用到的数学计算公式: -k*(P-Po)=A //一个元素,其加速度与弹簧的位移比例 c*v=A //一个元素,其加速度与速度成比例已限制动作的进行 因此, A=-k*(P-Po)+c*v 上面公式中: 在这个等式,你会注重到两项都会产生加速度,它会改变物体的速度,正如速度可以改变物体的位移相同。因此原理分析如下 : 当我们将一个物体从其初始状态而变为另一个状态时,一个加速度就产生了,它可以依次产生一个速度,而这个速度又会改变物体的位移以便使其回到原来状态。然而,当它回到初始位置时,又没有作用力去让它停下来,因此它会继承运动(过头了)。再一次,弹簧会产生一个加速度让物体回到它的初始位置,所以若没有阻碍力,物体将在其初始位置左右不停的摆动或者左右移动。初始状态可以是它在屏幕上的位置、大小、比例、透明度等等。 A=-k*(P.current-P.initial) //即A=-k*(当前状态-初始状态) V.current=c*V.last+A//即当前速度=c*前一速度+ P.current=P.last+V.current //即当前状态=前一状态+当前速度 将这种动作应用于MC的方式是: onClipEvent (enterFrame) { dx = this._xscale-xo; //初始化X轴坐标下的弹性形变或摆动 dy = this._yscale-yo; //初始化Y轴坐标下的弹性形变或摆动 ax = -_root.spring*dx; //生成X轴坐标下的加速度 ay = -_root.spring*dy; //生成Y轴坐标下的加速度 vx = vx*_root.damp+ax; //生成X轴坐标下的速度 vy = vy*_root.damp+ay; //生成Y轴坐标下的速度 this._xscale += vx; //将物体向其初始化的X轴坐标移动 this._yscale += vy; //将物体向其初始化的Y轴坐标移动 } 弹性值可以安下述方式设定其初始状态: onClipEvent (load) { xo = 100; yo = 100; } 返回类别: Flash教程 上一教程: 用另一种方法处理RPG地图---用好两个图层 下一教程: FlashAS教程:在主影片中制作外部loading进度条 您可以阅读与"《物理学的弹性》分析"相关的教程: · Flash8播放器模型:弹性跑道 · 韩国A3动态弹性菜单分步学 · Flash中的物理运动动画编程 · Flash光特效综合分析 · Flash制作出色点线形弹性菜单 |
快精灵印艺坊 版权所有 | 首页会员中心在线印刷在线编辑付款方式索取样品设计指南连锁门店 |