当前位置: 首页 > 图文教程 > Flash动画 > Flash动画制作 > FlashMX课件中的拖动

Flash动画制作
巧用超级解霸在Flash V5.0中插入录像
教你用Flash MX来制作简单的课件界面
Flash MX 2004 ActionScript图文教程(二)
Flash MX 2004 ActionScript图文教程(三)
Flash MX 2004 ActionScript图文教程(四)
Flash MX 2004 ActionScript图文教程(五)
Flash MX 2004 ActionScript图文教程(六)
flash场景之间相互跳转的实现方法
Flash本地加密
FLASH -- 关于变量的问题FLASH -- 关于变量的问题
Flash5 画任意直线教程
Flash MX 视频导入功能详解
制作飞舞的蝴蝶
Flash MX 2004 ActionScript图文教程(七)
Flash MX 2004 ActionScript图文教程(八)
Flash MX 2004 ActionScript图文教程(九)
Flash MX 2004 ActionScript图文教程(十)
Flash教程 飞翔的文字
Flash MX 2004 ActionScript图文教程(十一)
制作Flash网站技巧拾零

Flash动画制作 中的 FlashMX课件中的拖动


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-22   浏览: 27 ::
收藏到网摘: n/a

  用Flash MX制作交互式的课件时,很多场合都需要用到拖动。在Flash MX中主要的拖动方式有以下三种:无任何约束的拖动、限制在某一矩形范围内的拖动、限制在某一路径上的拖动。下面通过实例加以说明。

  1. 无任何约束的拖动

  (1)打开“插入”菜单的“新建元件”命令,在“创建新元件”对话框中,“名称”框内输入“球”,“行为”选择“影片剪接”。

  (2)画一个圆,最好是让圆心和影片剪接的中心对齐。

  (3)选择主场景,按F11打开“库”面板,将刚制作好的球拖动至主场景中。

  (4)选择主场景中的球,打开窗口下方的“属性”面板,在名称框内输入名称ball。

  (5)右击ball,选择“动作”命令,在代码编辑框内输入:

  on(press)

  {

   startDrag("",true);//允许拖动ball

  }

  on(release, releaseOutside)

  {

   stopDrag();//释放鼠标时,停止拖动ball

  }

  (6)拖动ball,我们将看到ball可以拖动到场景中的任意位置,释放鼠标时,ball将停止拖动。

  2. 约束某一矩形范围内的拖动

  将以上代码改为:

  on(press)

  {

  //限制拖动范围为(0,0)到(100,100)之间,注意坐标原点位于场景中的左上角。

   startDrag("",true,0,0,100,100); }

  on(release, releaseOutside)

  {

   stopDrag();

  }

  再拖动ball,将看到ball被限制在某一区域内拖动。

  3. 沿某一路径的拖动

  在某些场合,如通过拖动动态生成数学函数图像时,因为函数图像都有一个函数式约束,决定了以上两种方法都不可行。这种拖动的关键在于要根据约束条件来决定被拖动对象的位置。下面以动态生成圆来说明此类拖动问题的解决方法。

  (1)通过“插入”菜单制作一个名为“点”的电影剪接,画一个小点表示该电影剪接,注意点的中心和电影剪接的中心点重合。

  (2)转到主场景,新增一图层,将两图层分别命名为“脚本”和“对象”。

  (3)选择“对象”时间轴,在场景中加入两个“点”的实例,在它们的属性面板中分别命名为“yuanxi”(表示圆心)和“dian”(表示圆周上的点),让它们适当保持一定的距离,并且让“yuanxi”位于场景的中央。

  (4)右击“脚本”层第一帧,选择“动作”,在代码编辑窗口内输入以下脚本:

  drag_flag=false;//拖动标志

  x0=yuanxin._x;

  y0=yuanxin._y;

  dian_x=dian._x;

  dian_y=dian._y;

  //计算圆的半径,这就是拖动圆周的点的约束条件,被拖动的点到圆心的距离等于半径。

  r=Math.sqrt((x0-dian_x)*(x0-dian_x)+(y0-dian_y)*(y0-dian_y));

  _root.onEnterFrame =function()

  {

   if (drag_flag)

   {

   x = _xmouse;

   y = _ymouse;

   angle=Math.atan(Math.abs(y0-y)/Math.abs(x-x0));

   dian_x=x0+r*Math.cos(angle);

   dian_y=y0-r*Math.sin(angle);

   //第一象限

   if((x>=x0) &&&& (y<=y0))

   {

   dian_x = x0+r*Math.cos(angle);

   dian_y = y0-r*Math.sin(angle);

   depth=angle*180/3.14159;

   }

   //第二象限

   if((x<=x0) &&&& (y<=y0))

   {

   dian_x=x0-r*Math.cos(angle);

   dian_y=y0-r*Math.sin(angle);

   depth=angle*180/3.14159+90;

   }

   //第三象限

   if((x<=x0) &&&& (y>=y0))

   {

   dian_x=x0-r*Math.cos(angle);

   dian_y=y0+r*Math.sin(angle);

   depth=angle*180/3.14159+180;

   }

   //第四象限

   if((x>=x0) &&&& (y>=y0))

   {

   dian_x=x0+r*Math.cos(angle);

   dian_y=y0+r*Math.sin(angle);

   depth=angle*180/3.14159+270;

   }

   duplicateMovieClip("dian","dian" add depth,depth);

   _root["dian" add depth]._x=dian_x;

   _root["dian" add depth]._y=dian_y;

   _root.clear();

   _root.moveTo(x0,y0);

   _root.lineStyle(1,0xff0000,100);

   _root.lineTo(dian_x,dian_y);

   }

  }