![]() |
Загрузчик "Все сразу"
Привет всем.
В моей флешке используются много одинаковых внешних swf-ок. Хочется загрузить одну за один раз, а потом просто брать дубликаты. Полагаться на то, что одинаковые swf-ки кэшируются я не могу (надо брать загруженный дубликат моментально, а не через, например, 0,1с, как при кэшировании) и не хочу. Идея такая: Создаю класс ExternalFilesLoader, в котором Loader загружает одну swf-ку в себя. Далее нужна функция, которая бы копировала эту swf-ку и возвращала ее (например, как Loader, не важно). Далее я хочу вызывать эту функцию хоть 100 раз и что бы все подружалось моментально. Тут и есть проблема. Код:
...Вообще, моя затея с моментальным возвращением дубликата внешнего файла swf верна? |
Цитата:
Зачем подгружать одно и тоже несколько раз. Подгружаете swf один раз, затем создаете сколько угодно экземпляров включенных в нее данных. Если конечно они отлинкованы а не просто лежат в главной timeline. |
Подождите, может Вы меня не так поняли.
Я и хочу загрузить swf-ку только один раз, т.е. я даже хочу загрузить все внешние swf-ки, используемые в главной флешке один раз, а потом просто брать дубликаты без всяких подгрузок. Вот и все. И никакой главной таймлайн я не использую (пишу даже не в Flash IDE). |
Ну так и загружайте один раз.
А что у Вас в этих swf? Цитата:
|
Цитата:
Цитата:
|
Цитата:
Но как мне потом сделать штук 40 копий этого файла? Если я буду делать addChild, например, то у меня они не будут дублироваться. |
Цитата:
А внешние swf тоже в FDT собирались? |
Цитата:
|
Если бы Вы грузили jpg, то можно было использовать один и тот же BitmapData. И на основе него создавать сколько угодно Bitmap.
А в Вашем случае наилучший вариант это запихнуть все данные в одну swf, прописать им классы и пользоваться. |
т.е. предлагаете [Embeded]?
Я сначала так и делал, но так не пойдет, не все смогут юзать это. Или как Вы предлагаете? |
Тут 2 варианта:
1) Загружать все файлы отдельно, в них прописать Document class. Затем через applicationDomain получить доступ к Document class и создавать нужное число экземпляров. 2) Все swf запихнуть в библиотеку одного файла, прописать им Linkage. Загрузить этот файл swf. Далее то же самое. Все это конечно актуально если у Вас есть доступ к исходникам :) |
Хм... Думаю, стоит пошаманить в области
Код:
var _sampleLoader:Loader = new Loader(); |
Я пишу компонент с поддержкой скинов.
Идеально конечно если скин будет являться одним swf-файлом, например, defaultSkin.swf, а в нем будут символы (элементы скина), в которых прописаны заранее декларированные Linkage Class. Я хочу сделать типа прелоадера, в котором до загрузки всей флешки будет загружаться этот скин swf. Из него я и буду уже множить мои элементы. |
Ну вот, пункт 2.
|
Попробуйте new loader.content['constructor']. Только сомневаюсь, что будет работать.
|
Цитата:
P.S. Народ, как вообще делается скинирование в компонентах? Может есть какие-нибудь наработки или готовые решения? |
Хм... А чем вам не нравится вариант с png скинами + ScaleBitmap (с поддержкой 9scalegrid)?
Ну, скажем, как это сделано у http://www.bytearray.org/?p=109. Пример: http://www.foxaweb.com/projects/liqu...eSkinning.html Пример скина: http://www.foxaweb.com/projects/liqu...utton_skin.png Я, на пример, давно взял png скины на вооружение. И не нужны никакие linkage + универсальнее метод. Цитата:
|
у меня кроме шкурки должен быть функционал небольшой, например, создаем символ-кнопку, у класса этого символа должна быть функция setText(), которая устанавливает текст на кнопке, а как это будет обрабатываться внутри моей флешке уже все равно. Т.е. у некоторых элементов будет взаимодействие через мини API.
Цитата:
спасибо всем! |
Ну, а в чем проблема-то?
Вам нужно-то всего навсего сделать класс Skin, который будет парсить bitmapdatу pngшки и scalebitmap. В итоге в каждом вашем интерфейсе будет что-то типа: Код:
var skin:Skin = new Skin(); |
Цитата:
Спасибо заранее.. |
Код:
var c:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("ClassName") as Class; |
Цитата:
Чувствую выльется все это у меня в SkinManager на основе swf-файлов. Но и внедрение PNG нужно попробовать... |
Хм... Ну, если исходить из эстетической точки зрения, то, если вам важно именно веторные скины, используйте.
Но это не практично. Объясню. В свое время (когда я писал Skin, SkinManager) то понял, что наши дизайнеры не знают linkage :) (что не удивительно), зато они знают Export as: *.png (32) в фотошопе. А когда я прихожу на работу и у меня лежат 50 Fla и в каждом по 30 скинов = 30*50 = 1500 и каждому надо linkage задать, то я понял, что лучше PNG скины. И им проще и мне проще, а на визуальную часть никак "глазом" не влияет. Фишка вся в png в том, что любой может потом скинить и flash-разработчик и дизайнер. Поэтому от swf я отказался. Так что... Есть над чем подумать |
Ты прав,
мне вектор особо ни к чему, но я вижу и другие плюсы swf - скомпиленная сборка, при желании ее не вскроешь и/или не изменишь, т.е. любой может распространять скин. В png есть, конечно, свои плюсы. А ты юзаешь этот LiquidComponent? Он фри? |
Decompiler кто-то отменял? ;)
enepx не надо паранои. На все есть принт-скрин + ф-ия trace в Corel X3 (отлично битмапки трейсит). И на swf и на png. Так что... Цена вопроса.. Цитата:
|
У класса Loader начиная с версии плеера 115 существует свойство .bytes. После загрузки чего бы то ни было можно это свойство заполучить и записать в ByteArray, чем оно и является. Таким образом вы сможете насоздавать сколько угодно копий загруженного контента просто с помощью ByteArray.writeBytes()
|
Даже проще =)
У Loader'a помимо метода load(URLRequest), есть метод loadBytes(byteArray). Загружаем внешний файл как массив байтов, и лоадером считываем этот массив неограниченное число раз внутри программы. *метод, loadBytes - тоже асинхронный, поэтому рекомендую обращаться к событию окончания загрузки. Код:
public var urlLoader:URLLoader = new URLLoader(); |
В случае с SWF-кой не очень удобно, т.как она загрузится заархивированая (т.е потом на каждое прочтение ее нужно будет опять разархивировать), а .byes это уже разархивированая флешка. Ну, хотя, тоже, зависит, что критичнее.
|
Но ведь так будет расходоваться в n раз больше памяти.
|
в обоих случаях памяти будет знатно жраться :)
|
Ну я оба случая и имел в виду :)
Если создать n отлинкованных экземпляров объекта и n копий с помощью loadBytes, разница в расходе памяти и будет в n раз. |
Цитата:
|
| Часовой пояс GMT +4, время: 13:54. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.