周淼(MillsonZhou)的个人博客,记录、收藏、分享

AS3替换鼠标

开发过程中出现这样的需求,当鼠标移动到某一元件上面的时候,将默认鼠标替换为自定义的鼠标(一个元件)

我是这样写的:

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对应的元件换成了自己画的一个长方形元件,鼠标也是用的静态的一张图,结果还是闪个不停

又纠结了很长时间,并请教了老大之后,终于得出了一个结论,问题出在自定义的鼠标上面,看下面两张图的对比

old.pngnew.png

当鼠标移动到_mc上面时,触发MOUSE_OVER事件

1
2
_cursor.x = MouseX;
_cursor.y = MouseY;

这两段代码之后将会触发MOUSE_OUT事件,然后在MOUSE_OUT事件中

1
_cursor.visible = false;

这行代码使_cursor被隐藏,再次触发MOUSE_OVER事件,两个事件就这样不停的触发,造成鼠标闪动,为什么会这样?

如果尝试着把Mouse.hide(); 和 Mouse.show(); 这两行代码注释掉的话,你会发现自定义的鼠标还是会闪动

当_cursor移动到鼠标位置的时候,如果你给_cursor加了MOUSE_OVER事件的话,你会发现这个事件被触发了,这下应该懂了吧,系统鼠标就相当于一个隐藏的文件,虽然看不到,但是它还是存在的,当把_cursor移动到鼠标位置的时候,就挡住了_mc,这时必然会触发MOUSE_OUT事件,反之亦然

怎么解决,一种就是通过上面两个图的方法,更改_cursor元件,往原点外偏移一段距离;或者:

1
2
_cursor.x = MouseX ± x;
_cursor.y = MouseY ± x;

只要不挡住系统鼠标就行,但是这种只适合比较大的元件,需要比较精确的定位的话,这种方法可能是行不通的,不知道其他还有什么方法




如果只是需要在整个flash中替换鼠标的话,相对而言就没有这么复杂了

1
2
3
4
5
6
7
8
9
10
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();
}




文章发布后可能会有修改,修改错误、笔误什么的,一切以三水之都博客下内容为准

flash cs3无法导出flash,一闪就消失了

在使用flash cs3+as3开发flash程序的时候,遇到了这样的问题,当导出flash的时候,导出对话框一闪就消失了,编译器也不报错

如果报错的话倒好了,知道错在哪里就可以修改了,最怕的就是这种情况,没有头绪

google了一通,觉得应该是文本使用了“动画消除锯齿”的缘故

因为我起初是在win xp下开发的,当时没有问题,因为使用的字体是安装过的

后来开发基本完成了就放在一边很长时间,这期间为了装酷装上了win7,可能正好没有那个字体吧,就发生了这种情况

把所有的“动画消除锯齿”改为使用设备字体就好了

你可以在这里http://kids.ci123.com/home.php看到这个flash (需要注册的,公司的网站)

AS3中Keyboard.DELETE问题

在flash AS3的开发过程中遇到了类似下面的问题

1
2
3
4
5
6
7
8
9
10
stage.addEventListener(KeyboardEvent.KEY_DOWN, KeyPressed);
public function KeyPressed(e:KeyboardEvent):void {
var keyPressed = e.keyCode;
if(keyPressed == Keyboard.DELETE){
trace("delete key has been pressed");
}
if(keyPressed == Keyboard.LEFT) {
trace("Left key has been pressed");
}
}

LEFT键有效,DELETE却没有反应,在天地会的QQ群里询问未果,自己动手丰衣足食吧

百度搜了一下,没什么帮助,再谷歌,终于在一个外国网站上面发现了解决方案,还是老外厉害

原来出现这个问题的原因是测试情况下,flash播放器本身有快捷键,菜单栏里面设置一下就好了,“控制(Control)”子菜单“禁用快捷键(disable keyboard shortcuts)”选中就好了

看来以后还是多到外国的网站看看吧,给出原帖链接:http://www.kirupa.com/forum/showthread.php?t=326666

返回顶部