Flash管理鼠标监听器[ActionScript]

原创 2006年06月14日 18:54:00
/*----------------------------文档说明-------------------------  *  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 AS3.0监听事件

在flash中我们可能会遇到,某要需要播放到某一帧或者某一片段是执行某段代码。我们可以用监听事件来完成,比如当舞台上的某个影片剪辑(super) 需要在它播放完之后,播放另一个影片剪辑(man): ...
  • alpha_xiao
  • alpha_xiao
  • 2015年08月19日 16:16
  • 1283

flash 的鼠标事件详解

Flash AS3鼠标事件使用详解  鼠标事件(MouseEvent)和鼠标位置(AS3鼠标坐标总结)是RIA中最重要的人机交互途径。最近在做一个动态产品展示的系统ProdutShow的时候才发现自己...
  • jinpeng0
  • jinpeng0
  • 2013年08月21日 09:41
  • 765

常用鼠标事件,键盘事件总结

-moz-:firefox浏览器特有属性; -webkit-:chrome,sa
  • lululul123
  • lululul123
  • 2016年12月11日 17:02
  • 1276

高级as程序员应该掌握的知识点

回到flash,个人认为一个菜鸟要向老手以及高手/大师转变需要掌握的: 理解flash的显示列表 理解事件冒泡,理解鼠标事件等 理解flash的性能瓶颈和大多数影响性能的地方 理解帧跑道模型,...
  • chongtianfeiyu
  • chongtianfeiyu
  • 2013年01月08日 14:53
  • 338

关于鼠标移动监听接口:MouseMotionListener

MouseMotionListener 用于接收组件上的鼠标移动事件的侦听器接口。旨在处理鼠标移动事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 MouseMotionAdapter(仅...
  • u010142437
  • u010142437
  • 2013年05月11日 21:44
  • 2304

Java的监听器种类

Listener是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。(通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。当增加一个HttpSession时,就激发 sessio...
  • caomiao2006
  • caomiao2006
  • 2015年04月19日 22:12
  • 378

[疯狂Java笔记]事件处理:事件类型、监听器接口、事件适配器

1. 不同类型事件对应不同类型的监听器接口:     1) 总的来说就是实现了该种类型的接口,就能监听并处理该种类型的事件;     2) 常见的事件类型有ActionEvent、WindowEven...
  • Lirx_Tech
  • Lirx_Tech
  • 2016年03月05日 14:25
  • 1857

Js与flash交互:在html页面中用js与MyReport插件交互

Html页面与flash的加载如下图,flash是html页面的一个插件节点。 js与flash进行交互,首先要处理好html页面和swf的加...
  • hunkcai
  • hunkcai
  • 2013年07月30日 23:43
  • 14538

AS3 如何让鼠标不响应透明区域

废话不多说 ,直接上代码 /** * 单像素检测 * @return * */ public function hitTestPoint(dis:DisplayO...
  • gzyshengongshe
  • gzyshengongshe
  • 2014年08月28日 20:18
  • 1024

JTree的节点式样美化实现鼠标事件监听

想要实现JTree节点的式样自定义,首先要继承DefaultTreeCellRenderer类,DefaultTreeCellRenderer类是每个节点的父类。public class TreeCe...
  • yuanzihui
  • yuanzihui
  • 2015年02月25日 14:09
  • 2241
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Flash管理鼠标监听器[ActionScript]
举报原因:
原因补充:

(最多只允许输入30个字)