Flash管理鼠标监听器[ActionScript]

 
 
/*----------------------------文档说明-------------------------  *  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; }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值