Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flex

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.04.2009, 17:33
Kennysp вне форума Посмотреть профиль Отправить личное сообщение для Kennysp Найти все сообщения от Kennysp
  № 1  
Ответить с цитированием
Kennysp

Регистрация: 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>
Компилируем его из командной строки, получаем swf.
Как теперь получить доступ к изображению image1?

При использовании linkage -> Export for ActionScript все ясно:
Код:
[Embed(source="test.swf", symbol="SymbolName")]
А вот как из MXML сделать символы доступными для импорта ...

Старый 21.04.2009, 18:47
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
В случае с Image, это будет (Object(myImage.content).constructor as Class). А в случае с любым другим компонентом это может быть что угодно... а почему именнo Image нужен?
__________________
Hell is the possibility of sanity

Старый 21.04.2009, 19:07
Kennysp вне форума Посмотреть профиль Отправить личное сообщение для Kennysp Найти все сообщения от Kennysp
  № 3  
Ответить с цитированием
Kennysp

Регистрация: Mar 2009
Сообщений: 28
Задача такая: вместо того чтобы грузить множество картинок- запаковать их в swf и загрузить одним файлом. Картинок много, поэтому вставлять в библиотеку флэша и отмечать у каждой Export for ActionScript - не выход.
Подумал использовать компиляцию из xmxl - програмно сгенерировали xmxl, скомпилировали swf - готово.
После этого в основном приложении загружаем полученную swf с помощью loader и достаем картинки.

Код AS3:
Object(myImage.content).constructor as Class
Не совсем понял Вас. Это сделает картинки доступными после загрузки Loader`ом?

Изменю свой вопрос:
Есть mxml, в котором объявлен класс (ResoursesClass скажем). После компиляции мы получили resourses.swf.
Как мне получить доступ к ResoursesClass после загрузки loader`ом?

Старый 21.04.2009, 19:55
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ммм... нет, так вы можете получить ссылку на класс, который был сгенерирован врезультате ембеда (только после того, как картинка была загружена).
Но я бы сказал, что это не удобно... для вашей ситуации... а почему нельзя сгенерить те же теги ембедов? Так загружаемая флешка получится гораздо меньше в размере, да и вообще мороки меньше...
т.е. генерим такой вот 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>
Вместо ${file} соответственно подставляем имя нужного файла.

Это не нужно генерить каждый раз, одного раза достаточно:
Код AS3:
package 
{
public interface IAssets {
function getDefinitions():Array;
}
В загружающей флешке:
Код AS3:
(myLoader.content as IAssets).getDefinitions()[0]; // будет классом соответствующим первой картинке
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 21.04.2009 в 19:59.
Старый 22.04.2009, 16:15
Kennysp вне форума Посмотреть профиль Отправить личное сообщение для Kennysp Найти все сообщения от Kennysp
  № 5  
Ответить с цитированием
Kennysp

Регистрация: Mar 2009
Сообщений: 28
wvxvw, спасибо большое.

Добавлено через 35 минут
Не совсем понял с интерфейсом IAssets
Есть mxml:
Цитата:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<fl:MovieClip xmlns:fl="flash.display.*" implements="IAssets">
<mx:Script>
<![CDATA[
[Embed(source="Image1.jpg", mimeType="image/jpeg")]
private var Image1Class:Class;

/** IAssets implementation */
public function getDefinitions():Array {
return [Image1Class];
}
]]>
</mx:Script>
</fl:MovieClip>
</mx:Application>
Есть тестовое приложение:
Код AS3:
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
		}
	}
}
Есть файл classes/IAssets.as:
Код AS1/AS2:
package classes{
	public interface IAssets {
		function getDefinitions():Array;
	}
}
В результате после загрузки строчка
Код AS3:
trace((loader.content as IAssets));
выводит null


Последний раз редактировалось Kennysp; 22.04.2009 в 16:53.
Старый 22.04.2009, 18:04
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Так вы не имплементили интерфейс - естественно, если вы будете приводить типы ничего не получится...
Т.е. вы имплементите разные интерфейсы, IAssets и classes.IAssets.
И зачем вы туда запихали <mx:Application>? он там вообще не нужен...
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 22.04.2009 в 18:07.
Старый 22.04.2009, 22:14
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 7  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: 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>
getStyle возвращает класс который расширяет в итоге простой flash.display.Bitmap (AssetClass -> BitmapAsset -> FlexBitmap ->Bitmap) так что добавить его просто в контэйнер не получится...


Последний раз редактировалось 7thsky™; 22.04.2009 в 22:22.
Старый 22.04.2009, 23:40
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 8  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
@ 7thsky™:
Ну только вот зачем человеку в ресурсах тащить весь фреймворк если ему от туда 5 классов нужно? Разница между 5К и 150К все-таки не такая уж маленькая...
__________________
Hell is the possibility of sanity

Старый 23.04.2009, 00:06
7thsky™ вне форума Посмотреть профиль Отправить личное сообщение для 7thsky™ Найти все сообщения от 7thsky™
  № 9  
Ответить с цитированием
7thsky™
Flash Aксакал
 
Аватар для 7thsky™

Регистрация: Jun 2005
Сообщений: 636
Ох боже ты мой wvxvw - человек использует mx.core.Application из Flex'а? использует mx.controls.Image? (первый пост человека в этом треде)- туда уже все эти классы включенны. О чем спорить собираемся?

Вопрос в теме про флекс - решение соответственно флексовое. Правильное флексовое решение - это стили. плюсы очевидны - возможность байндить + рантайм загрузска CSS модулей.

Можно реализовать каcтомные решения типа Вашего, все будет работать, вопрос только зачем когда уже есть встроенный механизм.


Последний раз редактировалось 7thsky™; 23.04.2009 в 00:09.
Старый 23.04.2009, 01:28
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 10  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По-моему из того же первого поста ясно видно, что человеку Application и Image ни во что не уперся, и он просто не знает, как то же самое можно сделать проще и гораздо эффективнее. Это вообще абсурд предлагать встроить в библиотеку картинок весь фреймворк только ради того, чтобы эти картинки можно было встраивать как стили... Мое решенее ни чуть не менее "Флексовое", оно просто на 150К меньше весит и компилироваться будет быстрее...

PS. Да и плюс потом не будет головной боли с загрузкой фрейморковской SWF в не-фреймворковский контекст... это хотошо, что сейчас можно с помощью" хака это сделать, но вполне возможно что туда еще какую-нибудь ерунду добавят, и "хак" перестанет работать... кроме того, человек впервые столкнувшийся с этой проблемой может много времени убить на то, чтобы просто понять, как это чудо загрузить...
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 23.04.2009 в 01:36.
Создать новую тему Ответ Часовой пояс GMT +4, время: 05:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 05:29.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.