Flash and Flex applications, examples and sources: Взаимодействие между Flex и Flash ================================================================================ Bjorn on 27 June, 2008 Часто бывает что нужно использовать swf файлы, скомпилированные во Flash, внутри Flex'а. Задача такая: доступ к переменным, функциям и свойствам в ролике, загруженному при помощи Image или SWFLoader и наоборот. 1. Получить доступ к свойствам и функциям Flash ролика, скомпилированного для Flash плеера 8-й или более ранней версии (avm1, Action Script 1.0, 2.0). 2. Получить доступ к свойствам и функциям Flash ролика, скомпилированного для Flash плеера 9 версии (avm2, Action Script 3.0). AVM1 - виртуальная машина, использующаяся во флеш плеер до 9 версии, в 9 версии используется AVM2 (также AVM1 поддерживается 9-м плеером для сохранения совместимости) Для управления роликом, который использует 8-ю или более раннюю версию Flash плеера будем использовать класс LocalConnection. Он поможет нам осуществить доступ к методам Flash'a из Flex'а и наоборот. Код флеш ролика: var lc:LocalConnection = new LocalConnection(); lc.stopyellow = function( ) { _root.stop(); } lc.playyellow = function( ) { _root.play(); } lc.allowDomain("*"); lc.connect("swf8connector"); red.onRelease = function() { var sendLC:LocalConnection = new LocalConnection(); sendLC.send( "swf2Flex", "redClick" ); } Здесь lc.stopyellow (и т.д.) можно написать функцию, которая будет выполнять какое-то действие во флеш ролике, lc.allowDomain("*") - обеспечивает связь между роликами с разных доменов, lc.connect("swf8connector") - уникальное имя для связи между роликами (на текущем компьютере может быть сделано лишь одно соединение с данным именем), sendLC.send( "swf2Flex", "redClick" ) - вызов функции redClick() из Flex'а. Код во Flex во многом похож, при создании приложения вызовем функцию init(): private function init():void { lc = new LocalConnection(); toswf = new LocalConnection(); toswf.client = this; toswf.connect('swf2Flex'); } toswf - это LocalConnection для связи с флеш роликом. Вызов функций из флеша: private function stopyellow():void { lc.send('swf8connector', 'stopyellow'); } Если Flash ролик использует avm2, то есть Action Script 3.0 и Flash плеер 9-й версии, то доступ к нему получить очень просто: MovieClip(myswf.content) - далее может получить доступ к любому свойству и метода этого клипа //из примера private function changeText():void { MovieClip(blueswf.content).blue.astext.text = btext.text; } При написании использована статья http://kb.adobe.com/selfservice/viewContent.do?externalId=749eaa47 Исходники - source flex, source flash, приложение - application