Чтобы дать вам предисловие, я начал возиться с обработчиками событий, чтобы исправить перекошенный переход анимации при переходе от одного набора зацикленных кадров к другому в пределах одной и той же временной линии.Удаление прослушивателей событий при воспроизведении 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» и так далее.
Как удалить этих слушателей после их увольнения? Могу ли я удалить их все сразу перед повторением?
Или, есть ли лучший способ проверить, где находится игровая точка, прыгая между двумя наборами циклов, заканчивая любой цикл, в котором он находится, прежде чем идти туда, где я говорю?
Отлично !! Я получал ошибку в том, что функция enterFrame дублируется, а затем я понял, что просто дал ей номер или немного изменил имя. Дух лол. Огромное вам спасибо, Кармакон! Также приятно знать, что я был на правильном пути. – Danielle