2016-01-27 3 views
0

Чтобы дать вам предисловие, я начал возиться с обработчиками событий, чтобы исправить перекошенный переход анимации при переходе от одного набора зацикленных кадров к другому в пределах одной и той же временной линии.Удаление прослушивателей событий при воспроизведении Flash-ролика

Хорошо, скажем, у меня есть анимация лошади, состоящая из 5 кадров. Теперь предположим, что у меня есть три разных цикла клипов этих кадров на разных скоростях (по-разному fps): ходьба, рысь и галоп.

Теперь предположим, что я создал кнопку, которая позволяет зрителю проходить через каждый набор циклов, а затем другой, чтобы они могли воспроизводиться с самого начала. Моя первоначальная проблема возникла при переходе от первого цикла (1-5) к следующему циклу (6-10), потому что по существу в любой точке при нажатии этой кнопки вперед я останавливаю цикл и начинаю его с самого начала. Отсюда икота в анимации.

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

Вот что код события:

forward1.addEventListener(MouseEvent.CLICK, trot); 

function trot(event: MouseEvent): void { 

addEventListener(Event.ENTER_FRAME, enterFrame); 
function enterFrame(e:Event):void { 
    if (currentFrame == 5) { 
     gotoAndPlay(6); } 

    } 
} 

Между тем следующий будет выглядеть следующим образом:

forward2.addEventListener(MouseEvent.CLICK, gallop); 

function gallop(event: MouseEvent): void { 

addEventListener(Event.ENTER_FRAME, enterFrame); 
function enterFrame(e:Event):void { 
    if (currentFrame == 10) { 
     gotoAndPlay(11); } 

    } 
} 

Я не знаю, если это важно кстати, но я создаю свою петлю на самый последний кадр каждой группы и отправка его обратно в первый кадр (этой группы).

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

playagain.addEventListener(MouseEvent.CLICK, fl_ClickToGoToAndPlayFromFrame_1); 

function fl_ClickToGoToAndPlayFromFrame_1(event:MouseEvent):void 
{ 
    gotoAndPlay(1); 
} 

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

Мое предположение заключается в том, что слушатели событий с первого игрового процесса все еще там и работают. Итак, по сути, Flash видит: «Эй, когда вы дойдете до кадра X, переходите к кадру Y» «Когда вы дойдете до кадра Y, перейдите в кадр Z» и так далее.

Как удалить этих слушателей после их увольнения? Могу ли я удалить их все сразу перед повторением?

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

ответ

1

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

forward1.addEventListener(MouseEvent.CLICK, trot); 

function trot(event: MouseEvent): void { 
    addEventListener(Event.ENTER_FRAME, enterFrame); 
} 

function enterFrame(e:Event):void { 
    if (currentFrame == 5) { 
     removeEventListener(Event.ENTER_FRAME, enterFrame); 
     gotoAndPlay(6); 
    } 
} 
+0

Отлично !! Я получал ошибку в том, что функция enterFrame дублируется, а затем я понял, что просто дал ей номер или немного изменил имя. Дух лол. Огромное вам спасибо, Кармакон! Также приятно знать, что я был на правильном пути. – Danielle

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