PDA

Просмотр полной версии : Как отслеживать остановку анимации?


djken
30.09.2014, 23:44
На временной шкале есть различные наборы анимации объекта, помеченные метками frameLabel - a1, a2, a3, a4.... и.т.д.
Объект с каждым разом будет рандомно анимироваться, проигрывая разные отрезки анимаций - например: a1, a4, a9, a2....
Как узнать, что текущий отрезок анимации проигрался, чтобы перейти к другому отрезку?

MikroAcse
30.09.2014, 23:57
Можно в конце каждого отрезка вставить код:
dispatchEvent(new Event(Event.COMPLETE))
А потом слушать:
animation.addEventListener(Event.COMPLETE, ...)

djken
01.10.2014, 03:19
Спасибо. Работает. Но есть нюанс.

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

ВОПРОС 1: Можно ли ловить события от экземляра, который находится не на первом кадре? Как правильнее сделать?

ВОПРОС 2: Нашел в доках события FrameLabel, появившиеся в ActionScript 3.0 - они не для моего случая? Только я пока не разобрался как ими пользоваться - в примечании написано: у этого события нет ни «фазы захвата», ни «фазы передачи», поэтому прослушиватели событий должны добавляться непосредственно в объекты FrameLabel.

Babylon
01.10.2014, 03:31
var mc=MovieClip(root);
mc.addEventListener(Event.COMPLETE, ...)

ZergMaster
01.10.2014, 03:52
Babylon наверное имеет в виду, что можно диспатчить событие не от имени данного мувика, а от рута, и туда же подписываться. То есть в конце отрезков

var mc=MovieClip(root);
mc.dispatchEvent(new Event(Event.COMPLETE));

и слушать из корневого таймлайна

var mc=MovieClip(root);
mc.addEventListener(Event.COMPLETE, ...)

djken
01.10.2014, 03:56
Babylon, спасибо за ответ, но это не то.
Переформулирую вопрос: как обратиться из кода на первом кадре к мувику, который находится, наример, на 3 ключевом кадре?

ZergMaster, если так, то тогда понятно, что имел ввиду Babylon. И мой ответ на свой вопрос тоже в таком случае понятен.

Одно единственное, хотелось бы конечно код более централизованным написать, а не раскидывать по кадрам...

Babylon
01.10.2014, 04:04
var mc= MovieClip(root);
mc.addEventListener(Event.COMPLETE,fun2)
function fun2(v)
{
trace('test');
}
К мувику надо сначало перейти. Если он в 3 кадре.
Root - это таймлайн :)
Root.gotoAndStop(3)
Доступны мувики в 3 кадре и т.д.

Добавлено через 7 минут
ZergMaster ну есть еще сцены:)))

В конце отрезков только диспатчить события.

Добавлено через 18 минут
Или в 1 кадре включи enterframe и определяй currentframe и по нему диспатч от доступных мувиков в кадре. Других вариантов не вижу

djken
01.10.2014, 04:34
Babylon, не догадался сначала делать переход к нужному кадру :)


mc.gotoAndStop(2);
mc.mc2.addEventListener(Event.COMPLETE, func);

function func(e:Event):void {
trace(e.target.name);
}


Все работает. Спасибо :)