Отслеживание мыши за окном в настольном приложении?

Я возвращаюсь к Flex / AIR после некоторого отсутствия, так что это может быть очень простой вопрос.

У меня есть настольное приложение AIR на основе окна. У него есть функция типа боковой панели / панели управления, которая скрыта до тех пор, пока пользователь не переместит курсор мыши X на ‹5 пикселей в левой части сцены / окна. Затем, если отображается боковая панель, она скрывается, если пользователь перемещает указатель мыши X на> 220. Просто.

Я столкнулся с глупой проблемой, когда пользователь может слишком быстро переместить мышь влево, пройти мимо левой части окна, и моя процедура открытия боковой панели не вызывается. Я пробовал использовать ENTER_FRAME, MOUSE_MOVE и MOUSE_OUT, по отдельности и в комбинации, но по-прежнему очень легко заставить рутину боковой панели выйти из строя.

this.stage.addEventListener(Event.ENTER_FRAME, controlPanelDisplayHandler);
this.stage.addEventListener(MouseEvent.MOUSE_MOVE, controlPanelDisplayHandler);
this.stage.addEventListener(MouseEvent.MOUSE_OUT, controlPanelDisplayHandler);

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

Кажется, я припоминаю, что здесь была некоторая проблема безопасности, но это было довольно давно. Может ли кто-нибудь предложить способ выполнения этой простой функции?

private function controlPanelDisplayHandler(event:Event):void
{
trace("mouseX" + this.stage.mouseX);

if (sidebarDisplayed == false){
    if (mouseX <= 5){ 
        sidebarDisplayed = true;
        showSidebar();  
    }
} else if (sidebarDisplayed == true){

    if (mouseX >= 240){
        sidebarDisplayed = false;
        hideSidebar();  
    }
}

person spring    schedule 02.10.2012    source источник
comment
может помочь ниже ссылка: - blog.flexexamples.com/2008/02/22/   -  person Mahesh Parate    schedule 03.10.2012
comment
@MaheshParate - это сработало, спасибо!   -  person spring    schedule 03.10.2012


Ответы (1)


Вы тоже новичок во Flex и, возможно, не помогаете, но пробовали ли вы Event.MOUSE_LEAVE?

Хотя, возможно, возникнет та же проблема, не уверен.

person Sam Summers    schedule 02.10.2012
comment
Спасибо за предложение! Я просто попробовал, но результат тот же: быстрое перемещение мыши, и событие не срабатывает. Arrgh. Глупая мелочь, которая должна быть легкой. Надеюсь, завтра свежим взглядом увижу, что делаю глупость. - person spring; 03.10.2012