![]() |
Как лучше всего удалить MovieClip со сцены?
trace("hello world!") :victory:
Ситуация: - есть куча классов с отрисованной анимацией - каждый класс наследуется от MovieClip - мувик нужно добавить на сцену, проиграть 1 раз и затем удалить Как сделано сейчас: - через Delegate создается анонимная функция, которая посредством addFrameScript вешается на последний кадр мувика Вопрос: Можно ли это сделать лучше и, если да, то как? Заранее trace("thank you, folks") :drinks: |
Ого, какой вопрос от вас (:
А почему именно через Delegate, а не сразу addFrameScript с анонимной функцией? |
Лучше бросать в конце анимации событие сигнализирующее об окончании анимации. Это позволит одинаково работать с анимациями имеющими разные уровни вложенности (из глубины анимации можно бросить всплывающее событие)
Добавлено через 1 минуту К тому же при этом не надо будет использовать недокументированные возможности флеша. |
Цитата:
Цитата:
1) лезть в каждую анимацию и писать ей скрипт в кадре (это epic fail) 2) эмм... а как еще? Я так понимаю, что только через addFrameScript. Только я не понимаю, что такое нужно в этот addFrameScript написать, чтобы заставить мувик отправить нужное событие и чтобы это не было анонимной функцией |
Цитата:
Цитата:
|
Бросание кем? В данном случае вариант с Delegate и прямым вызовом мне кажется более приемлемым. Насчет jsfl - круто это все до тех пор, пока Вам всегда нужно использовать графику в одном контексте. ИМО - fail =)
|
Цитата:
Цитата:
Через некоторое время изменяем анимацию на несколько кадров, ищем в коде где к ней привязаны addFrameScript, и правим их. Так? Добавлено через 3 минуты Да, ещё нужно делать все анимации одноуровневыми или прописывать и помнить идентификаторы вложенных клипов (снова же лезть в каждую анимацию). Либо, для случая с удалением, находить самую длинную анимацию из вложенных, и считать её длину продолжительностью проигрывания. |
gloomyBrain, открыл я доку от адоба и обнаружил, что единственное место в хэлпе по ас3, где упоминается делегирование тут, да и то больше в контексте, мол для программеров, которые не могут отвыкнуть от ас2 и, мол, так делать не хорошо.
Исходя из этого рекомендовал бы всю анимацию наследовать от некоего класса, в котором через addFrameScript на последний кадр вешалась бы функция, которая диспатчила команду наверх об удалении. Что касается значительной вложенности - это ИМХО частный случай, требующий другого, индивидуального, подхода. ЗЫ. если есть другие варианты - тоже было бы интересно... |
Цитата:
|
Вот кстати с утра подумалось об общем классе и деспатче события яЗакончилПроигрываться. Это универсальный способ, ибо можно поставить счетчик, по истечению которого можно удалить всех, кто поместился в вектор-пул. Это как пример полезности)
|
Цитата:
Цитата:
ЗЫ по ходу нет ничего проще Delegate в данном случае. Да поможет мне GC =) |
зачем 84?
пусть все ваши клипы наследуются от одного кастомного класса, расширяющего MovieClip, в котором можно реализовать нужный функционал... нет? |
Во-во, от одного и нужно. Если у них разная длина таймлайна, можно передавать число кадров в конструктор этого класса.
|
КорДум, зачем передавать, если есть totalFrames?
|
я в подобном случае в этом суперклассе просто добавлял слушателя ENTER_FRAME...
ну и проверял currentFrame и totalFrames |
А, действительно, я не использовал это со времен AS1/2.
|
Если честно я слегка ошарашен. Я думал Delegate вообще не существует в AS3 как явления.
Глум, я не очень понял чем тебе не подходит addFrameScript ? P.S. где можно найти инфу о Delegate в AS3? Везде пишут что он встроенный в язык и скрыт от пользователя. |
то что это недокументированный метод не смущает?
|
derhab, а чем это плохо?
То что в какой-то момент перестанет работать? Сомневаюсь. Скорее сделают документированным. |
Цитата:
|
Код AS3:
Код AS3:
Про наследование - я создаю AS файл и пишу в нем нужный функционал. Далее мне нужно для всех символов библиотеки указать его как класс, от которого надо унаследоваться... Ага, спасибо разобрался =) В CS3 почему-то не получалось указать baseClass без написанного ручками linkageClass (может, лицензию надо поставить?) Сори за потраченное время =/ |
А, понятно. Не думал, что это Delegate`ом называется, спасибо. )
|
| Часовой пояс GMT +4, время: 12:41. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.