as3 - управление мерцанием при масштабировании кнопки или фрагмента ролика - PullRequest
0 голосов
/ 09 сентября 2009

Я часто сталкиваюсь с такой ситуацией, но, похоже, никогда не найду хорошего решения. У меня есть мувиклипы, которые я немного масштабирую при наведении курсора, но если вы наводите курсор мыши на край клипа, он просто сидит и мигает, непрерывно получая события mouseOver и mouseOut. Как вы справляетесь с этим? Опять же, обычно это проблема при масштабировании фрагмента ролика или кнопки.

my_mc.addEventListener(MouseEvent.MOUSE_OVER, mOver);
my_mc.addEventListener(MouseEvent.MOUSE_OUT, mOut);

private function mOver(m:MouseEvent) {              
   TweenLite.to(m.target, .2, { scaleX:1.1, scaleY:1.1} );
}

private function mOut(m:MouseEvent) {
   TweenLite.to(m.target, .2, { scaleX:1, scaleY:1} );
}

1 Ответ

1 голос
/ 10 сентября 2009

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

Пара идей:

  1. Наложение прозрачного спрайта, который будет действовать как область кнопок и масштабировать другой дочерний объект, содержащий содержимое.
    т.е. объект, чьи события ввода от мыши запускаются, остается постоянным размером: только визуальные артефакты изменяют размеры
  2. (проще) Удалите обработчики событий во время перехода, повторно добавив их в функцию обратного вызова, вызванную свойством onComplete объекта анимации TweenLite:
my_mc.addEventListener(MouseEvent.MOUSE_OVER, _animate);
my_mc.addEventListener(MouseEvent.MOUSE_OUT, _animate);

private function _animate(event:MouseEvent):void
{
    var mc:Sprite = event.target as Sprite;        
    var animScale:Number = (event.type == MouseEvent.MOUSE_OVER) ? 2 : 1;

    TweenLite.to(mc, 0.5, {
        onStart: function():void {
            mc.removeEventListener(MouseEvent.MOUSE_OVER, _animate);
            mc.removeEventListener(MouseEvent.MOUSE_OUT, _animate);
        },
        scaleX: animScale, 
        scaleY: animScale,
        onComplete: function():void {
            mc.addEventListener(MouseEvent.MOUSE_OVER, _animate);
            mc.addEventListener(MouseEvent.MOUSE_OUT, _animate);
        } 
    });
}
...