ActionScript - отображать объект с несколькими событиями мыши? - PullRequest
0 голосов
/ 22 сентября 2010

Я создал простую панель со строкой заголовка и пытаюсь поделиться строкой заголовка между MouseEvent.MOUSE_DOWN, MouseEvent.MOUSE_CLICK и MouseEvent.DOUBLE_CLICK. При нажатии на кнопку мыши панель перетаскивается, при щелчке мыши панель разворачивается и разворачивается, а при двойном щелчке мыши панель скрывается.

Я изо всех сил пытаюсь заставить все это работать с тем же спрайтом строки заголовка панели. нажатие мыши активирует щелчок, когда мышь поднята и т. д. Можно ли различить эти события мыши на одном и том же объекте?


я забыл упомянуть, что я программирую приложение AIR, поэтому, хотя я считаю, что приведенное ниже решение PatrickS будет работать для обычного .swf-файла или файла, имеющего пользовательские функции перетаскивания, у меня нет доступа Функция startMove () в nativeWindow. Тем не менее, мне удалось разделить объект titleBar панели между событиями MOUSE_DOWN и MOUSE_CLICK путем опроса позиции nativeWindow.

private function titleBarMouseDownEventHandler(evt:MouseEvent):void
    {
    windowCoords = new Point(stage.nativeWindow.x, stage.nativeWindow.y);
    stage.nativeWindow.startMove();
    }

private function titleBarClickEventHandler(evt:MouseEvent):void
    {
    if  (stage.nativeWindow.x != windowCoords.x && stage.nativeWindow.y != windowCoords.y)
        return;

    //expand & collapse code
    }

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

да, вы можете проверить тип события и добавить условие для выполнения вашей функции


private function mouseEventHandler(event:MouseEvent):void
{
    switch( event.type )
    {
         case MouseEvent.MOUSE_DOWN:
               dragClip();
               break;

         case MouseEvent.CLICK:
               removeListeners();
               clickHandler();
               break;
     }

}

private function dragClip():void
{
   //remove listeners while you're dragging
   //add them back on mouse up
   removeListeners(); 
}

private function clickHandler():void
{ 
     //do what you need
     //then re-add the event listeners when the action is done
     addListeners();
}

если вы все еще не можете различить, используя этот метод, вам, возможно, придется создать второй обработчик для конфликтующих функций ... если подумать, вы можете также рассмотреть возможность отключения других обработчиков событий мыши, когда один активен. просто мысль

0 голосов
/ 22 сентября 2010

Да, но вы должны быть осторожны с порядком объявления ваших событий (хотя не знаете, какой из них должен идти первым ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...