as3: как эмулировать MouseEvents? - PullRequest
2 голосов
/ 23 марта 2011

Как я могу "эмулировать" 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 ]

6 голосов
/ 23 марта 2011

1 / Basic

В вашем случае вы можете позвонить напрямую

myMouseEvent(new MouseEvent(MouseEvent.MOUSE_DOWN));

2 / Событие

НоВы можете сделать это более ориентированным на события способом.

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

, где eventDispatcher - это Sprite ( или что-то еще ), к которому вы добавили слушателя.

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

Все три могут работать!

0 голосов
/ 23 марта 2011

Вызов 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
...