Embed клипа с одним кадром.
Век живи, век учись. (старинная народная поговорка).
Привет, дорогой читатель. После моих статей о физике мне пришли (и продолжают приходить) сотни писем с просьбами продолжить рассказ (шучу конечно - никто мне не пишет ;(...). Но сегодня я расскажу о другом. Итак, кратко суть проблемы.
В один ничем не примечательный день, делаю я операцию, которую до этого делал, ну наверное раз 1000 - самый обычный эмбед символа из swf. Дал имя классу, указал базовый класс как flash.display.MovieClip. Далее накорябал такой код:
[Embed(source="../lib/lib.swf", symbol="manyFramesClip")]//в этом клипе несколько кадров private const _MANY_FRAMES_CLIP_CLASS:Class; [Embed(source = "../lib/lib.swf", symbol = "oneFrameClip")]//в этом клипе ОДИН кадр private const _ONE_FRAME_CLIP_CLASS:Class; public function Main():void { var manyFramesClip:MovieClip = new _MANY_FRAMES_CLIP_CLASS();//OK var oneFrameClip:MovieClip = new _ONE_FRAME_CLIP_CLASS();//exception, information=TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать Main__ONE_FRAME_CLIP_CLASS@4cc5101 в flash.display.MovieClip. }
Ладно, подумал я, и решил переписать все методы, которые принимают MovieClip на методы, которые принимают DisplayObject. Внутри этих методов я добавлял
Спустя десять минут я ужаснулся от количества спагетти и решил вернуть все назад - теперь мои методы снова принимали MovieClip, а я искал в гугле решение проблемы. Там моментально нашлось 2 способа. Первый - это использовать Sprite, там где имеется клип с одним кадром. Этот вариант не прокатил (см. выше). Второй вариант - не делать клипов с одним кадром o_0 - делать все клипы минимум с двумя кадрами. Мне этот способ тоже чем-то не приглянулся (не могу объяснить - чем. Просто не понравился).
"Ладно, а что если заэмбедить всю свфку и уже оттуда дергать символы" - подумал я и руки мои уже стучали по клавиатуре, набивая заветные лексемы.
[Embed(source = "../lib/lib.swf", mimeType = "application/octet-stream")] private const _SWF:Class public function Main():void { var loader:Loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); loader.loadBytes(new _SWF() as ByteArray); } private function completeHandler(event:Event):void { var info:LoaderInfo = event.target as LoaderInfo; var manyFramesClipClass:Class = info.applicationDomain.getDefinition('manyFramesClip') as Class; var manyFramesClip:MovieClip = new manyFramesClipClass(); trace(manyFramesClip.totalFrames);//10 var oneFrameClipClass:Class = info.applicationDomain.getDefinition('oneFrameClip') as Class; var oneFrameClip:MovieClip = new oneFrameClipClass(); trace(oneFrameClip.totalFrames);//1 }
Всего комментариев 23
Комментарии
16.01.2012 14:04 | |
О как. Эмбед отдельных клипов превращает однокадровые в спрайты... Интересно.
|
16.01.2012 14:38 | |
Саня а ты разве не знал? Я уже давно с этим сталкнулся, когда еще первую скиновалку делал
|
16.01.2012 14:49 | |
Можно без использования лоадера
|
16.01.2012 14:55 | |
Цитата:
Саня а ты разве не знал? Я уже давно с этим сталкнулся, когда еще первую скиновалку делал
|
16.01.2012 15:07 | |
Не пойму - баг это или фича.
|
16.01.2012 15:12 | |
> Можно без использования лоадера
класс, спасибо |
16.01.2012 15:16 | |
А я что-то не понял - как без лоадера?
Upd.: а, понял - без mimeType надо эмбедить. Прикольно - магия (кто диспатчит событие COMPLETE???!!!). |
|
Обновил(-а) Волгоградец 16.01.2012 в 15:21
|
16.01.2012 15:19 | |
Цитата:
класс, спасибо
|
16.01.2012 15:19 | |
насколько помню, если маймТайп не указать, то свойство будет указывать на рут класс вашей ембед-свфки.
|
16.01.2012 15:19 | |
Цитата:
А я что-то не понял - как без лоадера?
|
16.01.2012 15:51 | |
Цитата:
Не пойму - баг это или фича.
|
17.01.2012 01:03 | |
3 вариант - использовать SWC.
Или с SWC есть другие неудобства? |
17.01.2012 01:38 | |
swc это совсем другая фича. и работать с ней совершенно по другому нужно
|
17.01.2012 10:31 | |
Как по-другому? Весь смысл - достать графику, нарисованную в флеше. С помощью swc это делать гораздо удобнее.
|
17.01.2012 11:02 | |
Цитата:
С помощью swc это делать гораздо удобнее.
|
17.01.2012 14:36 | |
Что бустрее и удобнее это он все верно сказал. Зато рантайм не погрузишь
|
17.01.2012 14:48 | |
Цитата:
Зато рантайм не погрузишь
|
17.01.2012 14:58 | |
А вспомнил, где-то были 3 крутые статьи про swc...
вот она статья: http://www.flasher.ru/forum/blog.php?b=317 Все, не буду больше не по теме писать... |
|
Обновил(-а) zuxul 17.01.2012 в 15:04
|
17.01.2012 15:10 | |
Цитата:
alatar как?
|
17.01.2012 16:12 | |
Inet_PC ну это же шаманство) проще же тогда тупо swf грузить - ибо толку от свс никакого тогда нету
|
17.01.2012 16:56 | |
Цитата:
Загрузить swc разархивировать и загрузить library.swf. Поидее должно сработать.
|
|
Обновил(-а) alatar 17.01.2012 в 18:08
|
17.01.2012 18:20 | |
alatar Ваш вариант гораздо лучше без сомнения.
|
Последние записи от Волгоградец
- Изометрическая сортировка. Новый подход. (25.01.2013)
- Stage3D заметки (06.04.2012)
- Embed клипа с одним кадром. (16.01.2012)
- Производительность операций с floating point number (18.03.2011)
- FTE based text controls (10.01.2011)