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

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

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

Регистрация: Feb 2010
Сообщений: 8
По умолчанию Вызвать функцию из вложенной SWF. (я в отчаянии)

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

Прошу Вашей помощи...

Ситуация (взял задачку для упрощения):

Есть SWF2

в ней есть функцию swf2_function():string
(которая возвращает некое значение)

Есть SWF1, в которую я загружаю SWF2 с помощью SWFLoader:
Код AS3:
<mx:SWFLoader id="load1" loaderContext="{lc}"
         source="dataload_test.swf" complete="loadcompl(event)" />
ну и соответственно в loadcompl(e:Event):void я хочу обращаться к функциям, переменным (разумеется они все public) загруженной SWF2.

loaderContext="{lc}"

это у меня :
Код AS3:
[Bindable]
            private var lc:LoaderContext;
и иницилизуруюсь в функции:
Код AS3:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
	            backgroundColor="0xFFFFFF"
	            creationComplete="f_start_2();">
/*пропущено всякая фигня*/
private function f_start_2():void
			{
		        lc = new LoaderContext();
                        lc.checkPolicyFile = false;
                        lc.applicationDomain = ApplicationDomain.currentDomain;
                        lc.securityDomain = null;
            }
Сама флешка загружается успешно, так как если я при создании флешке SWF2 укажу запускать какую-либо функцию (c alert-ом к примеру), то при запуске SWF1 высветится Alert второй флешки. (но мне этого не надо).

Как всё-таки правильно обртатиться к параметрам и функциям загруженной SWF2??

что-то вроде swf2.application.swf2_function();

ну в данном случае наверно что-то вроде:

Код AS3:
load1.content.swf2_function()


Flex + AS3

Добавлено через 19 минут
на сколько я понимаю для вызова функций мне так же нужно использовать
Код AS3:
public var loadedSM:SystemManager;
в функцию иницилизации SWF1 я вставляю:
Код AS3:
loadedSM = SystemManager(load1.content);
и дальше по-идее могу обращаться через loadedSM к функциям SWF2 ... но нифига не получается

при попытке запустить с :
Код AS3:
Local(loadedSM.application).f_start();
(как написанно в примере: http://wiki.flash-ripper.com/?title=SWFLoader)
он ругается: 1180: Call to a possibly undefined method Local.

Как правильно, чтобы он видел мои функции?

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну так а кто ж знает где вы ее там во второй SWF объявили... И еще не понятно стремление пользоваться SWFLoader'ом - назначение и работа этого класса покрыта пеленой мрака и мракобесия - оно вам нужно?
А вообще - trace() и describeType() на что существуют? Потрейсте, что у вас в loader.content - я думаю, натолкнет на какие-то мысли.
__________________
Hell is the possibility of sanity

Старый 07.03.2010, 22:34
Xa13gi вне форума Посмотреть профиль Отправить личное сообщение для Xa13gi Найти все сообщения от Xa13gi
  № 3  
Ответить с цитированием
Xa13gi

Регистрация: Feb 2010
Сообщений: 8
Спасибо, что заглянули сюда у меня теперь появляется надежда

по поводу трасировки: (как раз его и трасировал и натолкнул на SystemManager):
trace(load1.content); выдал:
"[object _SWF2_mx_managers_SystemManager]"

во второй флешке функцию, которую хочу вызвать, я определил как public.
или есть ещё какая-та специфика объявления в случае обращения извне к ней?


Просто с флексом и АС3 я только-только начинаю работать
мне он нужен для некоторых целей и смысл задач я сильно упростил для себя чтобы опробывать методы, которые мне потребуются...

ну т.е. в текущий момент я хочу реализовать такой механизм:
есть SWF1 она там что-то делает своё и каждые 10 секунд ей нужно обновить данные из XML и обработать эти данные (запустить функцию с распарсенными значениями). Чтобы не рефрешить SWF а просто обращаться к данным на другой ресурс, подумал что лучшего всего сделать вторую SWF которая будет собирать данные (HTTPService) и формировать XML.
_____

вот как раз и осталось мне организовать обращение из SWF1 в SWF2 за вызовом функции, которая вернёт XML. в данном лсучае всё упростил

Добавлено через 6 минут
вот код SWF2:
Код AS3:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
	            backgroundColor="0xFFFFFF">
<mx:Script>
		<![CDATA[
 
		import mx.controls.Alert;
 
		public function f_start():void
			{
			 Alert.show(f_ret_val());
			}
 
		public function f_ret_val():String
		{
			var v_res:String = "Preved krasavcheg!"
			return v_res;
		}	
 
 
		]]>
</mx:Script>	
</mx:Application>
собственно мне нужно вызвать f_ret_val() из SWF1...

а вот если я здесь укажу

Код AS3:
creationComplete="f_start();"
то при загрузке SWF1 вылезет Alert. т.е. вроде как загрузилась SWF2 успешно...

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
object _SWF2_mx_managers_SystemManager - ну вот подумайте сами, вы создавали этот класс? Я так думаю, что нет, потому что это клон SystemManager'a а вы наверное свою функцию создали где-то в другом месте. Предположим, что вы ее создали в классе наследующемся от Application - вам нужно будет дождаться пока он загрузится (потому, что он во втором кадре), потом как-нибудь через, например, детей загруженного SystemManager'a найти ваш класс, или еще каким-нибудь способом - благо во фреймворке есть туча статических ссылок на разные его части. И только потом уже у него вызывать ваш метод.
__________________
Hell is the possibility of sanity

Старый 11.03.2010, 17:47
neva вне форума Посмотреть профиль Отправить личное сообщение для neva Найти все сообщения от neva
  № 5  
Ответить с цитированием
neva

Регистрация: Jul 2006
Сообщений: 30
Код AS3:
mc=MovieClip(swfLoader.content);
mc.someFunction();

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:19.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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