|
|
|||||
Регистрация: Mar 2009
Сообщений: 28
|
MXML импорт симвоов
Вопрос в следующем:
Как получить доступ к объектам (например к изображениям) внутри swf, скомпилированной из MXML Т.е. есть mxml файл <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Image source="@Embed('image1.jpg')" id="image1"/> <mx:Image source="@Embed('image2.jpg')" id="image2"/> <mx:Image source="@Embed('image3.jpg')" id="image3"/> ......... <mx:Image source="@Embed('image100.jpg')" id="image100"/> </mx:Application> Как теперь получить доступ к изображению image1? При использовании linkage -> Export for ActionScript все ясно: А вот как из MXML сделать символы доступными для импорта ... |
|
|||||
Modus ponens
|
В случае с Image, это будет (Object(myImage.content).constructor as Class). А в случае с любым другим компонентом это может быть что угодно... а почему именнo Image нужен?
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Mar 2009
Сообщений: 28
|
Задача такая: вместо того чтобы грузить множество картинок- запаковать их в swf и загрузить одним файлом. Картинок много, поэтому вставлять в библиотеку флэша и отмечать у каждой Export for ActionScript - не выход.
Подумал использовать компиляцию из xmxl - програмно сгенерировали xmxl, скомпилировали swf - готово. После этого в основном приложении загружаем полученную swf с помощью loader и достаем картинки. Не совсем понял Вас. Это сделает картинки доступными после загрузки Loader`ом? Изменю свой вопрос: Есть mxml, в котором объявлен класс (ResoursesClass скажем). После компиляции мы получили resourses.swf. Как мне получить доступ к ResoursesClass после загрузки loader`ом? |
|
|||||
Modus ponens
|
Ммм... нет, так вы можете получить ссылку на класс, который был сгенерирован врезультате ембеда (только после того, как картинка была загружена).
Но я бы сказал, что это не удобно... для вашей ситуации... а почему нельзя сгенерить те же теги ембедов? Так загружаемая флешка получится гораздо меньше в размере, да и вообще мороки меньше... т.е. генерим такой вот MXML: <fl:Sprite xmlns:fl="flash.display.*" xmlns:mx="..." implements="IAssets"/> <mx:Script> <![CDATA[ [Embed(source="path/to/${file}.jpeg", mimeType="image/jpeg")] private var ${file}ASSET:Class; [Embed(source="path/to/${file1}.jpeg", mimeType="image/jpeg")] private var ${file1}ASSET:Class; .... /** IAssets implementation */ public function getDefinitions():Array /** of classes */ { return [${file}ASSET, ${file1}ASSET, .... ${fileN}ASSET]; } ]]> </mx:Script> </fl:Sprite> Это не нужно генерить каждый раз, одного раза достаточно: В загружающей флешке:
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 21.04.2009 в 19:59. |
|
|||||
Регистрация: Mar 2009
Сообщений: 28
|
wvxvw, спасибо большое.
Добавлено через 35 минут Не совсем понял с интерфейсом IAssets Есть mxml: Цитата:
package { import flash.display.Loader; import flash.display.MovieClip; import flash.display.Sprite; import flash.events.Event; import flash.net.URLRequest; import classes.IAssets; public class testLoad extends Sprite { private var loader: Loader = new Loader; public function testLoad(){ addChild(loader); var path: String = 'test6.swf'; var request:URLRequest = new URLRequest(path); loader.load(request); loader.contentLoaderInfo.addEventListener( Event.COMPLETE, loaded); } private function loaded(e){ trace((loader.content as IAssets)); <font color="DarkRed"> // выводит null } } } В результате после загрузки строчка выводит null Последний раз редактировалось Kennysp; 22.04.2009 в 16:53. |
|
|||||
Modus ponens
|
Так вы не имплементили интерфейс - естественно, если вы будете приводить типы ничего не получится...
Т.е. вы имплементите разные интерфейсы, IAssets и classes.IAssets. И зачем вы туда запихали <mx:Application>? он там вообще не нужен...
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 22.04.2009 в 18:07. |
|
|||||
Flash Aксакал
Регистрация: Jun 2005
Сообщений: 636
|
Еще можно запихнуть картинки в CSS и не париться. Определить селектор с картинками и его и использовать везде.
типа: <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="{processInit()}" > <mx:Style> CommonImages { image-1: Embed(source="assets/image1.jpg"); image-2: Embed(source="assets/image2.jpg"); image-3: Embed(source="assets/image3.jpg"); } </mx:Style> <mx:HBox id="container" horizontalCenter="0" verticalCenter="0"> <mx:Image source="{StyleManager.getStyleDeclaration ('CommonImages').getStyle ('image1')}"/> <mx:Image source="{StyleManager.getStyleDeclaration ('CommonImages').getStyle ('image2')}"/> <mx:Image source="{StyleManager.getStyleDeclaration ('CommonImages').getStyle ('image3')}"/> </mx:HBox> <mx:Script> <![CDATA[ private function processInit ():void { var AssetClass:Class = StyleManager.getStyleDeclaration ('CommonImages').getStyle ('image1'); var instance:Bitmap = new AssetClass (); rawChildren.addChild (instance); } ]]> </mx:Script> </mx:Application> Последний раз редактировалось 7thsky™; 22.04.2009 в 22:22. |
|
|||||
Modus ponens
|
@ 7thsky™:
Ну только вот зачем человеку в ресурсах тащить весь фреймворк если ему от туда 5 классов нужно? Разница между 5К и 150К все-таки не такая уж маленькая...
__________________
Hell is the possibility of sanity |
|
|||||
Flash Aксакал
Регистрация: Jun 2005
Сообщений: 636
|
Ох боже ты мой wvxvw - человек использует mx.core.Application из Flex'а? использует mx.controls.Image? (первый пост человека в этом треде)- туда уже все эти классы включенны. О чем спорить собираемся?
Вопрос в теме про флекс - решение соответственно флексовое. Правильное флексовое решение - это стили. плюсы очевидны - возможность байндить + рантайм загрузска CSS модулей. Можно реализовать каcтомные решения типа Вашего, все будет работать, вопрос только зачем когда уже есть встроенный механизм. Последний раз редактировалось 7thsky™; 23.04.2009 в 00:09. |
|
|||||
Modus ponens
|
По-моему из того же первого поста ясно видно, что человеку Application и Image ни во что не уперся, и он просто не знает, как то же самое можно сделать проще и гораздо эффективнее. Это вообще абсурд предлагать встроить в библиотеку картинок весь фреймворк только ради того, чтобы эти картинки можно было встраивать как стили... Мое решенее ни чуть не менее "Флексовое", оно просто на 150К меньше весит и компилироваться будет быстрее...
PS. Да и плюс потом не будет головной боли с загрузкой фрейморковской SWF в не-фреймворковский контекст... это хотошо, что сейчас можно с помощью" хака это сделать, но вполне возможно что туда еще какую-нибудь ерунду добавят, и "хак" перестанет работать... кроме того, человек впервые столкнувшийся с этой проблемой может много времени убить на то, чтобы просто понять, как это чудо загрузить...
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 23.04.2009 в 01:36. |
Часовой пояс GMT +4, время: 05:29. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|