开发过程中出现这样的需求,当鼠标移动到某一元件上面的时候,将默认鼠标替换为自定义的鼠标(一个元件)
我是这样写的:
| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 | | 11 | | 12 | | 13 | | 14 | | 15 | | 16 | | 17 | | 18 | | 19 | | 20 | | 21 | | 22 |
| | var _cursor:MovieClip = new my_cursor; //my_cursor为自定义的一个元件
| | _cursor.visible = false;
| | addChild(_cursor);
| |
| | _mc.addEventListener(MouseEvent.MOUSE_OVER, onMcOverHandler);
| | _mc.addEventListener(MouseEvent.MOUSE_OUT, onMcOutHandler);
| |
| | private function onMcOverHandler(e:MouseEvent):void{
| | trace("over");
| | Mouse.hide();
| | _cursor.visible = true;
| | _cursor.x = MouseX;
| | _cursor.y = MouseY;
| | _cursor.startDrag();
| | }
| |
| | private function onMcOutHandler(e:MouseEvent):void{
| | trace("out");
| | Mouse.show();
| | _cursor.visible = false;
| | _cursor.stopDrag();
| | } |
|
按理说,应该是没有问题的,可是鼠标老是会闪,trace出的结果是不停的over、out,检查了老半天,觉得代码是没有问题的,难道是元件的问题,直接把_mc对应的元件换成了自己画的一个长方形元件,鼠标也是用的静态的一张图,结果还是闪个不停
又纠结了很长时间,并请教了老大之后,终于得出了一个结论,问题出在自定义的鼠标上面,看下面两张图的对比


当鼠标移动到_mc上面时,触发MOUSE_OVER事件
| | _cursor.x = MouseX;
| | _cursor.y = MouseY; |
|
这两段代码之后将会触发MOUSE_OUT事件,然后在MOUSE_OUT事件中
这行代码使_cursor被隐藏,再次触发MOUSE_OVER事件,两个事件就这样不停的触发,造成鼠标闪动,为什么会这样?
如果尝试着把Mouse.hide(); 和 Mouse.show(); 这两行代码注释掉的话,你会发现自定义的鼠标还是会闪动
当_cursor移动到鼠标位置的时候,如果你给_cursor加了MOUSE_OVER事件的话,你会发现这个事件被触发了,这下应该懂了吧,系统鼠标就相当于一个隐藏的文件,虽然看不到,但是它还是存在的,当把_cursor移动到鼠标位置的时候,就挡住了_mc,这时必然会触发MOUSE_OUT事件,反之亦然
怎么解决,一种就是通过上面两个图的方法,更改_cursor元件,往原点外偏移一段距离;或者:
| | _cursor.x = MouseX ± x;
| | _cursor.y = MouseY ± x; |
|
只要不挡住系统鼠标就行,但是这种只适合比较大的元件,需要比较精确的定位的话,这种方法可能是行不通的,不知道其他还有什么方法
如果只是需要在整个flash中替换鼠标的话,相对而言就没有这么复杂了
| | var _cursor:MovieClip = new my_cursor;
| | addChild(_cursor);
| |
| | Mouse.hide();
| | stage.addEventListener(MouseEvent.MOUSE_OVER, onStageOverHandler);
| | private function onStageOverHandler(e:MouseEvent):void{
| | _cursor.x = MouseX;
| | _cursor.y = MouseY;
| | e.updateAfterEvent();
| | } |
|
文章发布后可能会有修改,修改错误、笔误什么的,一切以三水之都博客下内容为准