as3:如何模拟鼠标事件?

时间:2011-03-23 14:45:12

标签: flash flex actionscript-3 air adobe

如何“模仿”MouseEvent尚未通过按钮启动 eventListener (例如只是通过一个简单的函数调用)如何将变量传递给它以切换event.types

    public function myMouseEvent(event:MouseEvent):void
    {
            switch (event.type)
            {
                case "mouseDown" :
                     trace(event.type)
                     break;

                case "mouseUp" :
                     trace(event.type)
                     break;
            }
    }

    myMouseEvent(null) // ? nothing happens...

2 个答案:

答案 0 :(得分:6)

1 / 基本

在您的情况下,您可以直接致电

myMouseEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));

2 / 活动

但你可以采用更加面向事件的方式来做到这一点。

eventDispatcher.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));

其中eventDispatcher是您添加听众的精灵(or something else)。

3 / 正确的事件

由于您在发送时无法访问MouseEvent的所有属性,因此有一种更简洁的方法:

public function myMouseEvent(event:Event):void
{
        switch (event.type)
        {
            case "mouseDown" :
                 trace(event.type)
                 break;

            case "mouseUp" :
                 trace(event.type)
                 break;
        }
}
eventDispatcher.addEventListener(MouseEvent.MOUSE_DOWN, myMouseEvent);
eventDispatcher.dispatchEvent(new Event(MouseEvent.MOUSE_DOWN));

这三个都可以工作!

答案 1 :(得分:0)

当您尝试访问空对象上的参数(myMouseEvent( null ))时,Exception调用实际上应该为您提供type

要正确调用它,只需创建一个MouseEvent对象即可传递给函数:

// add in any other params, like localX, stageX, etc
var m:MouseEvent = new MouseEvent( MouseEvent.MOUSE_DOWN );
this.myMouseEvent( m );

或者,如果您想要浏览事件系统,可以使用dispatchEvent()。像

这样的东西
this.stage.addEventListener( MouseEvent.MOUSE_DOWN, this.myMouseEvent );
this.dispatch( m ); // stage will catch this event