标题: 拖出自己的精彩—谈Flash MX课件中的拖动
问天
元帅
Rank: 1


元帅勋章 终身成就勋章
UID 11493
精华 187
积分 34221
帖子 33355
威望 91
金币 13148
热心 2619
阅读权限 100
注册 2006-4-7
状态 离线
拖出自己的精彩—谈Flash MX课件中的拖动

用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)
  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) &;amp;&;amp;&;amp;&;amp; (y<=y0))

   
  {

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

   
  dian_y = y0-r*Math.sin(angle);   
  depth=angle*180/3.14159;      
  }      

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

   
  on(release, releaseOutside)

   
  {

   
  stopDrag();   
  }

   
  再拖动ball,将看到ball被限制在某一区域内拖动。     
  //第二象限   
  if((x<=x0) &;amp;&;amp;&;amp;&;amp; (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) &;amp;&;amp;&;amp;&;amp; (y>=y0))      
  {
  (5)右击dian实例,选择“动作”命令,输入以下脚本:   
  on(press)      
  {

  _root.drag_flag=true;//在dian实例上按下鼠标左键,置拖动标志为真。      
  }   
  on(release, releaseOutside)   
  {      
  _root.drag_flag=false;//在dian实例上松开鼠标左键,置拖动标志为假。

   
  }      
  (6)测试影片,拖动dian实例,将看到在场景中会画出一个由点构成的圆。

   
  从此例可以看出,实现沿某一路径的拖动,关键是要通过约束条件找到拖动时的对象的坐标。

   

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

   
  depth=angle*180/3.14159 180;      
  }

   
  //第四象限

   
  if((x>=x0) &;amp;&;amp;&;amp;&;amp; (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);

   
  }   
  }

网友 问天 签名 - 网友社区 请您回个帖。谢谢
PR查询 免费域名 免费空间
顶部
[广告] 免费域名(Free Subdomain) 免费空间(Free hosting) PR查询(Google Pagerank)



当前时区 GMT+8, 现在时间是 2008-12-5 07:40
信产部ICP备案:京ICP备05066424号 北京市公安局网监备案:1101050648号

Powered by Discuz! 5.5.0
清除 Cookies - 联系我们 - 网友俱乐部 - Archiver - WAP