《物理学的弹性》分析

2008-04-02 11:00:41来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  首先,来认识一下弹性效果,我们这里把他理解为力,这个力拖动物体到目的地,并且当物体和目的地越远,这个力越大,就想弹簧上吊了一个物体!

  现在,开始一步步写代码。

  首先,随便制造一个mc,比如画一个小球,把他放在舞台的左边,对该mc写如下代码:
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,这时小球先减速,再反向加速。

  我们的目的应是小球先向右加速,然后减速再反向,再循环,似乎以一定点为中央振动。

  下一步,我们配置一个中央,用tx表示该中央的x坐标,然后求出tx和_x间的距离,加速度ax和距离成正比,即距离越近,加速度越小。
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;

  }


  我们还让小球能被拖动,如下:

  1.双击小球进入编辑状态;

  2.选中整个小球,把他转变为一个按钮;

  3.在按钮上写代码:
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)

  velocity(v) : 速度(v)

  acceleration(a) : 加速度(a)

  上面三个概念在弹性动画中都有应用。您可能对这些事实很熟悉了,即一根弹簧对外力有反应(例如拉伸作用),加在他身上的外力越大,那么这根弹簧的反作用力就越大。这个事实是弹性动画的基础,也就是所说的胡克定律。

  弹簧反作用力是由被称为"弹性系数(k)"的常数决定的。进一步的说,在一个无摩擦的环境中,这根弹簧是永远的伸缩摆动下去的,只要一旦他被外力拉动。所以我们再引入一个"阻碍常量(c)"来限制动作慢慢的停下来。因此,下面就是我们要使用到的数学计算公式:
-k*(P-Po)=A  //一个元素,其加速度和弹簧的位移比例

  c*v=A //一个元素,其加速度和速度成比例已限制动作的进行


  因此,
A=-k*(P-Po) c*v


  上面公式中:

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 变量命名的实用小技巧

下一篇: Flash文字编码问题解决方案