AS3中鼠标坐标与鼠标事件总结

 flex技术(www.flexjs.cn) 温馨提示:以下要使用以上代码别忘了 import flash.geom.Point;

1 鼠标事件分为MOUSE_OVER, MOUSE_MOVE, MOUSE_DOWN, MOUSE_UP, MOUSE_OUT, MOUSE_WHEEL和MOUSE_LEAVE。其中前六个事件都来自flash.events.MouseEvent类,最后一个MOUSE_LEAVE却是来自flash.events.Event,在导入类包的时候一定要注意这个问题,因为我在这点上就花了很长时间调试,才得发现问题所在。
MOUSE_OVER - 鼠标移动到目标对象之上时触发, 可以用于模拟按钮的mouse over效果;
MOUSE_MOVE - 鼠标在目标对象之上移动时触发,主要用于判断。比如判断在拖拽实例时,实例是否在允许的范围之内,如果超出,立刻停止拖拽或者重新设定实例的坐标;
MOUSE_DOWN - 鼠标在目标对象之上按下时触发。注意,只有按下鼠标左键时才会触发,右键和滚轮都不会触发。在目标对象之外按下鼠标左键,再移动到目标对象之上时,也不会触发;
MOUSE_UP - 鼠标在目标对象之上松开时触发。注意,只有松开鼠标左键时才会触发,右键和滚轮都不会触发。在目标对象之上按下鼠标左键,再移动到目标对象之外松开时,不会触发。但在目标对象之外按下鼠标左键,再移动到目标对象之上松开时,就会触发。
MOUSE_OUT- 鼠标移动到目标对象之外时触发。
MOUSE_WHEEL - 鼠标在目标对象之上转动滚轮时触发。
MOUSE_LEAVE - 当光标离开舞台时触发(stage.addEventListener(Event.MOUSE_LEAVE,leaveHandler);)。在使用自定鼠标后,在鼠标离开舞台时,触发MOUSE_LEAVE事件,然后可以把自定义的鼠标隐藏掉,避免还停留在舞台上。

2 mouseChildren。目标对象中含有子实例时,感应鼠标行为的是子时列,而非目标对象。如果使用 cursor.mouseEnabled=false; 就可以由目标对象来更应鼠标行为。

3 mouseEnabled。当实例重叠时,出于显示列表上方的实例总比下方实例更有优先权感应鼠标行为。当想让下方实例感应鼠标行为时使用 cursor.mouseEnabled=false; 即可。这常用于自定义鼠标后,去除自定义鼠标对鼠标行为的干涉,因为自定义鼠标往往一直处于鼠标下方,其他实例无法再感应到鼠标的变化。

另外,也许DOUBLE_CLICK也应该算做鼠标事件,但要使用它,必须先让doubleClickEnabled=true:
var bg:Sprite=new Sprite();
bg.doubleClickEnabled=true;
bg.addEventListener(MouseEvent.DOUBLE_CLICK,clickHandler);

鼠标是Flash里追主要的互动因素,经常需要侦测鼠标事件(AS3中鼠标事件小结)和得到鼠标的坐标。鼠标坐标的获取可以分为在文档类和在子类中,两种不同的情况。

1)如果是在时间线轴上,或者文档类上使用:
stage.mouseX 和 stage.mouseY

2)在子类(如_sprite:Sprite)上使用:
_sprite.mouseX 和 _sprite.mouseY
这里得到的是鼠标相对于_sprite的坐标。如果需要的是相对于舞台的坐标,则应该使用localToGlobal,如:
var mousePoint:Point=new Point(_sprite.mouseX, _sprite.mouseY);
mousePoint=_sprite.localToGlobal(mousePoint);
trace("Stage coordinates:"+mousePoint);

你可能感兴趣的:(AS3中鼠标坐标与鼠标事件总结)