快速业务通道

Flash实例剖析:单摆

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-14

 这是一个我们在中学学习物理的时候都很熟悉的一个东西:单摆。

  用鼠标拖绳子下面的小球然后释放,小球就会来回做自由摆动。

  用鼠标按小球下面的红色按钮可以让小球停下来在最初的位置。

  首先讲一下实现原理:做一个MC,再在这个MC里面放一个子MC,同时给这个子MC加上一段控制其属性的AS代码,比如在这个单摆实例中就是让AS控制MC的rotation属性(旋转角度)的变化来实现的。MC循环播放AS就循环执行,从而实现连续的运动。
  接下来我们]进入制作阶段,学习怎样制作这个单摆,大家也不妨先自己思考一下自己的做法。
  

本实例的组件结构图

  1、设置场景属性(Ctrl+M)。如下图所示: 主要设置movie的播放速度为20fps。如果低于这个数值太多就会使做出来的单摆摆得太慢,而且看起来不连贯;如果高于这个数值太多做出来的单摆会摆得太快。

?

  2、摆球的制作。新建一个球形按钮,取名:Ballbutton,如下图所示:

?

  3、为摆球按钮添加控制代码。新建一个MC,取名:Ballbutton Clip,在场景中把按钮Ballbutton拖入,同时在按钮上加上下面的AS。

on (press) {
  _parent._parent.move = true;
}
//当鼠标在按钮上按下时把它的上一级MC的上一级MC中的一个变量"move"赋值为true
on (release, releaseOutside) {
  _parent._parent.move = false;
}

//当鼠标在按钮上释放或者从按钮上移出时把它的上一级MC的上一级MC中的一个变量"move"赋值为false

  4、制作吊链。新建一个MC,取名:Ball and Line。在场景中画一条直线 ,其属性为:W:0;H:128;X:0;Y:0; 线型如图中红色圆圈所示,采用这样的线型可以更好的表现出链子的形状。 然后在“绳子” 的下面把组件 Ballbutton Clip拖进来并赋予一个实例名:button,如下图所示:

?

  5、阴影的制作。新建一个MC,取名shadow。如下图所示:

?


  6、摆动的实现和控制。新建一个MC,取名:Ball System。在场景新建三个层: Action,Ball,,Shadow。
  在Ball层,把组件Ball and line拖入到场景中,并赋予一个实例名:ball。
  在Shadow层,把组件Shadow拖入到场景中如下图所示:并赋予一个实例名:Shadow。

?

  分别在Ball层和Shadow层的第三帧插入帧,在Action层上的第一,二,三帧上插入关键帧。

  ◆、在Action层的第一帧上加上AS代码如下:

ball._rotation = rotation;//初始化ball的_rotation属性值;
to_rad = Math.PI/180;
//数学中1π=180度,在这儿设置to_rad为一度所表示的弧度值;

  ◆、在Action层的第二帧上加上AS代码如下:

if (move == true) {
  x = Math.max(Math.min(_xmouse, 128), -128);
  //设置单摆当前的水平位置;128就是前面链子的长度;
  rotation = (Math.asin(-x/128)/Math.PI)*180;  //设置单摆的旋转角度
  rot_vel = (rotation-old_rotation)/6;
} else {
  rotation = rotation + rot_vel;  //旋转角度累加;
  rot_vel? = rot_vel?-?rotation/90;
}
//下面代码使绳子、球和阴影运动
if (old_rotation != rotation) {
  ball._rotation = rotation;
  //设置球体和绳子的旋转角度“ball”就是球体和绳子构成的MC组件的实例名;
  sin_value = Math.sin(rotation*to_rad);
  shadow._x = -160*sin_value;
  //由于阴影在水平方向的移动距离比球体的移动距离大,所以设置为160;
  if (rotation<(last_rotation-5) or rotation>(last_rotation+5)) {
    ball.button._rotation = -rotation*0.75;
    //设置绳子下面的球体在运动时的旋转角度
    scale = 100+Math.abs(sin_value)*100;
    //设置阴影的大小
    shadow._xscale = scale;
    shadow._yscale = scale;
    last

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号