/*----------------------------文档说明------------------------- * Flash中常用一些自制的形状代替鼠标形状进行一些操作,比如模拟画笔 * 用手的形状拖放、模拟颜料桶,这个时候如果不管理好鼠标监听器的注册 * 卸载,以及鼠标的隐藏和显示的话会有很多意向不到的后果出现。 * 这里写了一个监听器的注册管理函数,用来管理鼠标监听器的注册、卸载、显示 * 和隐藏。 * 首先定义了几个要用到的状态码,定义各种Object用于注册监听器,然后用 * RegMouse函数进行注册,该函数接收一个Number类型的参数,也就是要注册的监听器类型 * 该函数首先卸载当前注册的监听器,然后注册新的监听器,如果当前监听器和要注册的新监听器一样的话 * 就卸载当前监听器,并显示鼠标的默认状态。 * 本例子主要是在制作一个Flash模拟Windows画图板的时候写的,下面是其中的部分代码。 *----------------------------------------------------------------------*/ /*-------------- 鼠标状态定义------------ * */ var _cursorFlag: Number = 0; // 记录当前注册的鼠标监听器状态。 var _cursorObj: Object = new Object ( ); _cursorObj. def = 0; _cursorObj. drag = 1; _cursorObj. select = 2; _cursorObj. tong = 3; _cursorObj. pip = 4; /*----------状态码--------------------- * 0:默认状态,无任何形状,只能切换到其他状态后进行操作 * 1:手的形状,可以从物品栏中拖物品 * 2:选择状态,可以选择操作区中的东西 * 3:油漆桶状态,可以涂色 * 4:吸管状态,设置颜色 *------------------------------------- *----------------------------------------*/ // 按钮事件定义 /*--------------- 用于控制菜单消失的鼠标监听器-------- * 当菜单显示出来,并且在菜单之外的地方单击鼠标时,让菜单消失(主要是画图板工具栏上的菜单)* *--------------------------------------------------------------*/ var _mmListen: Object = new Object ( ); _mmListen. onMouseDown = function ( ): Void { if (!menu_mc. hitTest ( _xmouse, _ymouse ) ) { Mouse. addListener (drawObj ); Mouse. removeListener (_mmListen ); menu_mc. gotoAndStop ( 1 ); } }; // 点击颜料桶时注册监听器 var dmtong: Object = new Object ( ); dmtong. onMouseMove = function ( ): Void { dmtong_mc. _x = _xmouse; dmtong_mc. _y = _ymouse; }; // 吸管工具 var dmpip: Object = new Object ( ); dmpip. onMouseMove = function ( ): Void { dmpip_mc. _x = _xmouse; dmpip_mc. _y = _ymouse; }; // 选择工具 var dmselect: Object = new Object ( ); dmselect. onMouseMove = function ( ): Void { dmcursor_mc. _x = _xmouse; dmcursor_mc. _y = _ymouse; }; // 画线工具 line_mc. clear ( ); var drawObj: Object = new Object ( ); drawObj. x1 = 0; drawObj. y1 = 0; drawObj. x2 = 0; drawObj. y2 = 0; drawObj. xx = 0; drawObj. yy = 0; drawObj. drawFlag = false; drawObj. moveFlag = false; drawObj. startFlag = false; drawObj. moveMC = new Array ( ); var plasterFlag: Boolean = false; drawObj. onMouseDown = function ( ): Void { // 如果在操作区之外按下鼠标,则返回 if ( _xmouse <= 68 || _xmouse >= 400 || _ymouse >= 260 || _ymouse <= 55 ) { return; } // 如果当前状态是不是移动选中的物品,则记录按下位置,用来画线 if (drawObj. moveFlag != true ) { drawObj. x1 = _xmouse; drawObj. y1 = _ymouse; drawObj. drawFlag = true; } else { drawObj. xx = _xmouse; drawObj. yy = _ymouse; drawObj. moveMC = new Array ( ); selectRect ( ); } drawObj. startFlag = true; }; drawObj. onMouseUp = function ( ): Void { if (drawObj. moveFlag != true ) { drawObj. x2 = _xmouse; drawObj. y2 = _ymouse; if (drawObj. x1 == _xmouse && drawObj. y1 == _ymouse ) { line_mc. clear ( ); } else { dmcursor_mc. nextFrame ( ); } drawObj. drawFlag = false; } drawObj. startFlag = false; trace ( "x1 = " + drawObj. x1 ); }; // 单鼠标在选中区域内时,变成移动图标,否则变成选择图标。 line_mc. onEnterFrame = function ( ): Void { if (_cursorFlag == _cursorObj. select && drawObj. x1 != drawObj. x2 && drawObj. y1 != drawObj. y2 && drawObj. startFlag == false ) { if ( ( _xmouse - drawObj. x1 ) * ( _xmouse - drawObj. x2 ) < 0 && ( _ymouse - drawObj. y1 ) * ( _ymouse - drawObj. y2 ) < 0 ) { drawObj. moveFlag = true; drawObj. drawFlag = false; dmcursor_mc. gotoAndStop ( 2 ); } else { drawObj. moveFlag = false; drawObj. drawFlag = true; dmcursor_mc. gotoAndStop ( 1 ); } } }; drawObj. onMouseMove = function ( ): Void { trace (drawObj. startFlag ); if (_cursorFlag == _cursorObj. select && drawObj. startFlag == true ) { if (drawObj. moveFlag == true ) { // 移动 if (drawObj. x1 + ( _xmouse - drawObj. xx ) < 65 || drawObj. x1 + ( _xmouse - drawObj. xx ) > 400 || drawObj. x2 + ( _xmouse - drawObj. xx ) < 65 || drawObj. x2 + ( _xmouse - drawObj. xx ) > 400 || drawObj. y1 + ( _ymouse - drawObj. yy ) < 50 || drawObj. y1 + ( _ymouse - drawObj. yy ) > 260 || drawObj. y2 + ( _ymouse - drawObj. yy ) < 50 || drawObj. y2 + ( _ymouse - drawObj. yy ) > 260 ) { return; } for ( var mm in drawObj. moveMC ) { drawObj. moveMC [mm ]. _x += _xmouse - drawObj. xx; drawObj. moveMC [mm ]. _y += _ymouse - drawObj. yy; drawObj. moveMC [mm ]. x = drawObj. moveMC [mm ]. _x; drawObj. moveMC [mm ]. y = drawObj. moveMC [mm ]. _y; } drawObj. x1 += _xmouse - drawObj. xx; drawObj. y1 += _ymouse - drawObj. yy; drawObj. x2 += _xmouse - drawObj. xx; drawObj. y2 += _ymouse - drawObj. yy; drawObj. xx = _xmouse; drawObj. yy = _ymouse; } else { drawObj. x2 = _xmouse; drawObj. y2 = _ymouse; } drawRect ( ); } else { } }; // 手型图标 var handObj: Object = new Object ( ); handObj. onMouseMove = function ( ): Void { hand_mc. _x = _xmouse; hand_mc. _y = _ymouse; }; hand_btn. onRelease = function ( ): Void { RegMouse (_cursorObj. drag ); }; // 鼠标监听器注册管理函数 function RegMouse (regID: Number ): Void { if (regID < 0 || regID > 4 ) { return; } // 清除上次的 switch (_cursorFlag ) { case _cursorObj. def : Mouse. hide ( ); break; case _cursorObj. drag : hand_mc. _x = hand_mc. _y = - 500; Mouse. removeListener (handObj ); break; case _cursorObj. select : dmcursor_mc. _x = dmcursor_mc. _y = - 500; select_mc. gotoAndStop ( 1 ); line_mc. clear ( ); Mouse. removeListener (drawObj ); Mouse. removeListener (dmselect ); break; case _cursorObj. tong : dmtong_mc. _x = dmtong_mc. _y = - 500; tong_mc. gotoAndStop ( 1 ); Mouse. removeListener (dmtong ); break; case _cursorObj. pip : dmpip_mc. _x = dmpip_mc. _y = - 500; pip_mc. gotoAndStop ( 1 ); Mouse. removeListener (dmpip ); break; } if (_cursorFlag == regID ) { _cursorFlag = 0; Mouse. show ( ); return; } // 注册新的监听器 switch (regID ) { case _cursorObj. def : Mouse. show ( ); break; case _cursorObj. drag : hand_mc. _x = _xmouse; hand_mc. _y = _ymouse; Mouse. addListener (handObj ); break; case _cursorObj. select : dmcursor_mc. _x = _xmouse; dmcursor_mc. _y = _ymouse; Mouse. addListener (drawObj ); Mouse. addListener (dmselect ); break; case _cursorObj. tong : dmtong_mc. _x = _xmouse; dmtong_mc. _y = _ymouse; Mouse. addListener (dmtong ); break; case _cursorObj. pip : dmpip_mc. _x = _xmouse; dmpip_mc. _y = _ymouse; Mouse. addListener (dmpip ); break; } _cursorFlag = regID; }
Flash管理鼠标监听器[ActionScript]
最新推荐文章于 2020-05-05 08:39:15 发布