用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) &&&& (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) &&&& (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))
{
(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) &&&& (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.l.neto(dian_x,dian_y);
}
}
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器