![]() |
Как получить из метки фрейма его номер ?
Доброго времени суток.
Есть Ф-я управляющая анимацией. (крутит мувики от точки до точки и обратно и т.д.) Анимация маркирована для удобства метками (frame label). Если в ф-ю поступает в качестве "от" и "до" параметров числа - все ок. Если пробую использовать метки - глючит. Подозреваю что дело в конструкции Цитата:
Как бы их перевести корректно ? Подскажите пожалуста. |
Просто меток не существует в swf :)
Они только для редактирования, как только ты создаешь swf, все метки заменяются текущими числовым значением нужных кадров. |
Ы.
В чем же тогда может быть загвоздка, если при вводе чиловых значений все ОК. А когда метки - глючит.... Привожу на всяк случай полный код ф-и: Цитата:
|
Синтаксис:
play_both( от , до ,ссылка на обьект , количество полуциклов , откуда начинать , направление , режим отладки) |
В режиме отладки при использовании меток выводит только
trace("start frame : "+obj._currentframe) А реферные фреймы проскакивает... =( Подскажите что то ? |
Я же тебе ответил :) При запуске, все метки конвертируются в номера кадров. Они ни где не храняться и сравнивать с ними бесполезно.
|
Конвертируются. И что из этого следует?
Почему бесполезно ? С числом (константой) ведь сравнивать можно... Или они НЕ заменяются числом ? Что то я совсем запутался =( Из твоего сообщения я сделал вывод, что нет разницы между использованием метки и числа так как при сборке в swf все метки заменяются числами. Я понял неправильно ? Если правильно то почему с ними нельзя тогда сравнивать ? А если нельзя сравнивать, то есть ли способ в as использовать в качестве атрибта метку ? |
А бллин. понял. Метки конвертируются только если они в gotoAndPlay например. А в других случаях метка - просто текст.
Я правильно понял ? И в этом случая поставленная задача не выполнима, так ? Тогда может кто то подскажет идею как справится с такой проблемой. Есть клип с записью разных движений. Эти движения вызываются вышеуказанной ф-ей. Если надо изменить скорость движения - меняем количество фреймов. И все ранее указанные движения "плывут". Надо все числа "переписывать". Отсюда идея с метками. Как бы выпутатся ? Можно конечно начать пложить бесчисленные переменные с связкой фрейм-движение. но это, извините извращение. Кроме того все связки все равно тогда придется править после каждой "подстройки" скорости. Есть какие то идеи ? Поделитесь ? |
Есть такая чудо-штука - broadcastMessage("...")
Фильм с твоими анимациями может генерировать события (широковещательная рассылка). Зарегестрируй его как вещателя: AsBroadcaster.initialize(myClip); Клип, который будет реагировать на эти события, зарегистрируй слушателем клипа myClip: myClip.addListener(listenerClip); В клипе myClip, в кадре с Анимацией 1 пишешь: this.broadcastMessage("onAnimation1"); Т.е. вместо метки фрейма ты используешь сообщение. При попадании на этот кадр будет генериться событие onAnimation1, которое "услышит" listenerClip. Теперь можно написать: listenerClip.onAnimation1=function(){ твои действия при попадании на кадр с сообщением "onAnimation1"} Таким образом ты отлавливаешь попадание на кадр с нужной анимацией без проверки номера кадра. Чем это может помочь тебе? Можно в цикле пробежаться по всем кадрам клипа myClip и получить номера кадров всех твоих анимаций. А перед пробегом написать: listenerClip.onAnimation1=function(){anim1Frame=myClip._currentframe} listenerClip.onAnimation2=function(){anim2Frame=myClip._currentframe} listenerClip.onAnimation3=function(){anim3Frame=myClip._currentframe} и т.д. Должно сработать ;) |
А можно еще проще:
В кадре с 1-й анимашкой пишем _root.anim1Frame=this._currentframe. В кадре с 2-й анимашкой пишем _root.anim2Frame=this._currentframe. и т.д. Ну и делаем то же самое: в цикле пробегаем по всем кадрам клипа myClip и получаем номера кадров всех твоих анимаций. Затем юзаем уже номера кадров |
> Есть такая чудо-штука - broadcastMessage("...") ... блпблпблп
Интересно как это связано с темой вопроса ... |
Попытка эмуляции меток :)
Ворон ты правильно понял, что метки конвертяться в кадры только внутри методов управляющих положением мувика на таймлайн. |
Цитата:
Если ты дочитал пост, то должен был понять. Вопрос ведь не о метках как таковых, а о какой-либо маркировке кадров, с которой сможет нормально работать код. |
Да что Вы говорите =)
|
2kruasan:
Идея с широковещательными сообщениями замечательная. Покрутил ее немного и столкнулся с такой проблемой. 0. broadcastMessage - у меня Flash MX. такого ключевого слова ненашол =( к какому из Build-in Classes оно относится ? 1. Имеет смысл делать только 2 широковещательных сообщения: повернуть вперед и повернуть назад. А двигать так же с помощью onenterframe 2.В одном морфинге может содержатся десяток "вложеных" движений. Например в повороте на 360 градусов есть поворот на 45... И при этом когда нам нужен именно поворот на 360 градусов мы будем получать сообщения от всех вложенных движений. Как то можно их похитрому диференцировать ? Например аргументами ? |
0.
Все, что связано с броадкастерами - вещи недокументированные. Даже в 7-ке их формально нет. Насчет FlashMX (6-ка) ничего сказать немогу, так как не использую. Хотя Р.Пеннер пишет, что если во FlashMX запустить такой код: ASSetPropFlags(AsBroadcaster, null,8,1); for(var i in AsBroadcaster) trace(i) то на выходе будет список методов и свойств, среди которых и broadcastMessage. 1. Тебе видней 2. Можно. broadcastMessage("onMessage",argument1, argument2,...,argumentN); Тогда отлов событий делаем так: listener_mc.onMessage=function(argument1, argument2,...,argumentN){...} |
> Все, что связано с броадкастерами - вещи недокументированные
Ошибочка, в восьмёрке уже документированы. |
Речь идет о шестерочке
|
> Речь идет о шестерочке
Это где это речь идёт о шестёрке? =) |
Цитата:
Доказало свою не состоятельность. Дело в том что присвоение происходит только когда мувик проигрывает этот фрейм. Что бы это было реально нужно как минимум один праз его полностью проиграть. Что грусно. =( Над громкоговорителем пока медитирую. |
Я ж говорил: один раз пробегаем в цикле по кадрам мувика. НЕ проигрываем мувик, а ПРОБЕГАЕМ В ЦИКЛЕ ПО ЕГО КАДРАМ. Это произойдет мгновенно, и ты получишь номера кадров с анимациями.
for(var i=1; i<=animations_mc._totalframes; i++){ animations_mc.gotoAndStop(i) } Проделываешь это с самого начала, а потом работаешь с номерами. То же самое надо сделать и при использовании броадкастера. |
Это конечно далеко не панацея ... так как все скрипты находящиеся в кадрах будут выполнятся ...
|
Жуть. Только если все скрипты в кадрах поставить внутрь условия который проверяет включен флаг обхода или нет.
|
Тогда наверно проще вручную ввести номера меток кадров ...
|
Я и говорю - жуть :)
|
А в целом надо организовывать правильно и заранее клип и не использовать тогда метки, а сразу кадры.
|
Цитата:
Хотя все относительно... Более рационального решения я пока не вижу |
| Часовой пояс GMT +4, время: 21:12. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.