2015-06-01 4 views
0

Я создал класс всплывающей подсказки. Когда мышь на MovieClip включается, и когда он отключается, отключите его. Мувиклип содержит некоторые другие мувиклипы. Мой код является то, что:Отправка мыши, когда мышь отсутствует

to.addEventListener(MouseEvent.MOUSE_OVER, showTip); 
to.addEventListener(MouseEvent.MOUSE_OUT, hideTip); 
to.addEventListener(MouseEvent.MOUSE_MOVE, MoveTip); 

и функции в том, что:

private function showTip(evt: MouseEvent) { 
     if (tip != null && !tip.visible) { 
      tip.x = evt.stageX; 
      tip.y = evt.stageY; 
      tip.visible = true; 
     } 
    } 

    private function hideTip(evt: MouseEvent) { 
     if (tip != null && tip.visible) { 
      tip.visible = false; 
     } 
    } 

    private function MoveTip(evt: MouseEvent) { 
     if (tip != null && tip.visible) { 
      tip.x = evt.stageX; 
      tip.y = evt.stageY; 
     } 

    } 

Его работа, но иногда функция hideTip и функция showTip включить в то же время и кончик мигает.

+1

все ответы интересны, но настройки вашей подсказке, чтобы не получать события мыши легче. – BotMaster

+0

@BotMaster Я бы сказал, что это лучше, а не проще, потому что всплывающая подсказка не должна быть интерактивной по дизайну. Но это не всегда так, например, есть интерактивные всплывающие подсказки, например, меню обновления для башен в игре TD, поэтому это решение не всегда приемлемо. Для случая только текста в всплывающей подсказке это достаточно. – Vesper

+0

Обычно это делается так: всплывающая подсказка не получает mouseevent (без неожиданного поведения), зависающий объект реализует интерфейс IReceiveToolTip (чтобы проверить, что он принимает всплывающие подсказки), этот интерфейс также должен обеспечивать отображение текста, который он должен отображать (реализованный при получении объекта), когда всплывающая подсказка показывает триггеры таймера, если таймер заканчивается, и указатель все еще находится поверх подсказки, подсказка получает mouseevent и принимает пользовательские вменения. Это довольно стандартно и доказывает, что они не учитывают неожиданное поведение. – BotMaster

ответ

0

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

const offsetX:Number=4; 
const offsetY:Number=4; // experiment with these 
private function showTip(evt: MouseEvent) { 
    if (tip != null && !tip.visible) { 
     tip.x = evt.stageX+offsetX; 
     tip.y = evt.stageY+offsetY; 
     tip.visible = true; 
    } 
} 

private function MoveTip(evt: MouseEvent) { 
    if (tip != null && tip.visible) { 
     tip.x = evt.stageX+offsetX; 
     tip.y = evt.stageY+offsetY; 
    } 

} 
0

Попробуйте использовать

to.addEventListener(MouseEvent.ROLL_OVER, showTip); 
to.addEventListener(MouseEvent.ROLL_OUT, hideTip); 

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

0

Как показано на рисунке @BotMaster и @Vesper, под мышкой отображается tip, что вызывает стрельбу MouseEvent.MOUSE_OUT.

Чтобы избежать этого, сделайте следующее:

tip.mouseEnabled = false; 
tip.mouseChildren = false; 
+0

Хм, я предположил, что, похоже, ударил, но ваш подход к исправлению этого поведения немного лучше моего. – Vesper

+0

Извините @ Vesper за то, что не дал должного кредита. Я быстро просмотрел ответы и не заметил никакого «активированного» кода, поэтому, учитывая, что комментарий BotMaster был единственным, предлагающим его. – null

Смежные вопросы