王朝网络
分享
 
 
 

Flash管理鼠标监听器[ActionScript]

王朝other·作者佚名  2006-06-15
宽屏版  字体: |||超大  

/*----------------------------文档说明-------------------------

* 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;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有