设为首页 加入收藏 网站搜索 繁體中文 中国建站网 — 站长资源分享平台

Flash实例剖析:单摆

来源:136z.Com 作者:佚名 时间:2005-03-12 23:13:11
 这是一个我们在中学学习物理的时候都很熟悉的一个东西:单摆。

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

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



  首先讲一下实现原理:做一个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_rotation = rotation;
  }
  old_rotation = rotation;
}

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

call("2");
//调用第二帧的AS;call()的作用是调用某帧的AS或者是调用某指定的函数括号里面是数字就表示调用第几帧的AS,也可以是某帧的Label Name或者是某个函数的name!
gotoAndPlay(2);
  //跳到第二帧播放;起循环的作用

  7、场景布置。回到Scene 1 在场景中拖入Ball System组件,赋予 Ball System组件一个实例名:ba 。为了更好的控制单摆停下来,我们在场景中拖入一个按钮,如下图所示那个红色的小按钮:

 

  为按钮上加入下面的As代码:

on (release) {
  ba.ball._rotation = 0;  //设置单摆的旋转角度为0;
  ba.move = not ba.move;  //设置ba中的move变量的值;
}

这样当需要让单摆停下来时就只需要按下此按钮就行了!
原文件下载学习

Tags:

  • 好的评价 如果您觉得好,就请您
      0%(0)
  • 差的评价 如果您觉得差,就请您
      0%(0)
  • 相关文章
    广告赞助

    文章随便看看 设计素材 建站学院 网页模板 视频教程

    网友评论

    共有 0 位网友发表了评论,得分 0 分,平均 0 分    查看完整评论

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 1分

    内 容:

             通知管理员 验证码: