Статьи

Передача данных между Flash и Flex и обратно

Наши недавние приключения в Flex / Flash Land потребовали от нас иметь компоненты Flash и Flex, чтобы общаться друг с другом. Вот несколько способов, с помощью которых вы можете заставить Flash и Flex передавать данные от одного к другому.

Во Flex мы можем встроить другие файлы Flex или Flash-файлы (почти все SWF-файлы) с компонентом swfloader . Этот компонент имеет завершенные и разгрузочные хуки для функций ActionScript, которые позволяют нам выполнять функции. В этом посте будут обсуждаться способы передачи данных между двумя типами компонентов.

В этом посте рассматриваются 3 различных способа взаимодействия файлов Flex / Flash друг с другом. Наслаждайтесь!

Действие Flex-> Flash [Или Flash-> Flash или Flex-> Flex]: LocalConnection

Думайте о localConnection как о сокете, который открывает свои методы для вызова другими SWF-файлами.

Чтобы включить это, добавьте некоторый код ActionScript на экране «Действия Flash» или добавьте новый метод во Flex.

Краткая версия этого:

private var lc:LocalConnection = new LocalConnection();
lc.client = this;
lc.allowDomains( "*" );
lc.connect( connectionString );

Вы только что открыли канал вещания, который позволит одному клиенту подключаться к нему. Допустим, у меня есть метод в этом файле с именем thisIsMyMethod. Чтобы вызвать методы удаленно (т.е. из Flex), вызовите это

private var lc : LocalConnection = new LocalConnection();
private var connectionString = mySWFLoader.content["connectionString"];
lc.send( connectionString, "thisIsMyMethod", "theseAreMyParameters" );

Примечание. Подумайте о создании уникальных имен соединений. В противном случае, если у вас открыто две версии вашего приложения, второе окно выдаст исключение «используется соединение», и все ваши события перейдут в первое окно. Самый простой способ, который я могу придумать, это добавить

var connectionString : String = "_suffix" + new Date().toString();

клиенту. Передать это значение во Flex из Flash очень просто, поскольку объект SWFLoader имеет доступ только к DisplayObject только для чтения со всеми параметрами, вы можете получить доступ к flash connectionString, вызвав что-то вроде mySWFLoader.content [connectionString]. Мы также можем связать эти каналы для двусторонней связи.

Допустим, что у моего Flex есть некоторые данные, которые зависят от моего Flash, и затем, когда данные должны быть возвращены, вы можете определить локальное соединение во Flash,

  • Flash определяет connectionString
  • Flex подключается через LocalConnection, считывая flashConnectString из SWFLoader.content [conn]
  • Flex открывает свой собственный LocalConnection.connect
  • Flex передает flexConnectionString во Flash (используя метод flashConnect)
  • Flex теперь может передавать данные во Flash
  • Flash теперь может передавать данные во Flex

Flash-> Flex (ярлык для событий)

Конечно, передача параметров в чистом ActionScript хороша, но она не в состоянии отразить управляемый событиями способ взаимодействия этих функций друг с другом. Используя flash-события, мы можем иметь более динамичное взаимодействие на основе событий.

В вашей Flash просто добавьте прослушиватели событий к вашим символам и запустите событие, когда элемент нажимается

var myInfo : String = "";
myButton.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler( evt:Event ):void
{
myInfo= evt.target.name ;
dispatchEvent(new Event("featureSelected",true));
}

В своем коде Flex вы бы добавили функцию для полного действия SWFLoaders, которая выглядит следующим образом:

mySWFLoader.content.addEventListener( "featureSelected" , handleEvent );
function handleEvent( evt:Event ):void
{
var selectedInfo : String = mySWFLoader.content['myInfo'];
}

Мы обнаружили, что, творчески называя наши символы, мы могли бы получить много функциональности от этой модели. Думайте об этом подходе как об использовании встроенного SWF-файла в качестве компонента MXML с поддержкой событий.

Одним из недостатков этого подхода может быть способ, которым внутреннее состояние компонента Flash должно быть определено ранее, тогда как подход Localconnection обеспечивает, по-видимому, неограниченный источник параметров. Вы можете определить более сложные События, которые несут полезную нагрузку данных, но тогда это становится неоправданно сложным, когда это не нужно.

Возможно, наиболее мощное использование — это объединение событий с локальным соединением. Используйте структуру событий, чтобы просто выделить выбранный узел или метатель событий, и используйте тип связи LocalConnection для тяжелой работы и передачи параметров.

Flex-> Flash (ярлык фильма)

Это, возможно, один из наиболее ограничивающих способов использования Flash во Flex, но он может выполнять свою работу, когда все, что вам нужно, это небольшой элемент управления Flash movieclip. Flex имеет доступ к DisplayObject встроенного файла Flash.

Думайте об этом подходе как об использовании Flex в качестве проигрывателя фильмов для SWF-файлов.

В рамках этого у вас есть доступ к:

  • mySWFLoader.content.play ()
  • mySWFLoader.content.stop ()
  • mySWFLoader.content.goToFrameAndStop (2)
  • mySWFLoader.content.goToFrameAndPlay (3)

Если у вас нет контроля над встраиваемым SWF-файлом, вы можете использовать этот метод для управления поведением включенного SWF-файла.

Если вы думаете об этой возможности с остальными вещами, которые возможны благодаря Flex и Grails, это означает, что вы можете комбинировать мультимедиа и анимацию, доступные в Flash, гибкость и формы из Flex и модель данных из Grails. Кто сказал, что сеть когда-либо была скучной?

Оригинальный Автор

Оригинальная статья Томаса Лин