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

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

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

Регистрация: Feb 2011
Сообщений: 29
По умолчанию Обращение к загруженному SWF

Здравствуйте.
Я загрузил SWF на сцену с помощью Loader. В событие Event.COMPLETE добавил его на сцену с помощью addChild. Подскажите пожалуйста как обратиться в загруженному SWF.
Например загруженный SWF состоит из нескольких кадров. При нажатие какой то кнопки в главном ролике мне нужно переплеснуть SWF на 1й кадр, при нажатие другой кнопки на 2й и тд.

Старый 06.04.2013, 18:06
Александр Мостовой вне форума Посмотреть профиль Отправить личное сообщение для Александр Мостовой Посетить домашнюю страницу Александр Мостовой Найти все сообщения от Александр Мостовой
  № 2  
Ответить с цитированием
Александр Мостовой
 
Аватар для Александр Мостовой

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
В загружаемом swf есть код или только графика?


В флешплеере в целях безопасности для каждого класса исполняемого кода (а классы создаются автоматически даже в случае написания кода во фреймах) присвоено определенное свойство SecurityDomain


Может вам информация ниже покажется несколько запутанной, но рекомендую загружать медиаданные с loaderContect ом для текщего домена. А код всех классов используемых в загруженном клипе хранить в основном swf.

А именно:

1. СОздаете в родительском приложении файлы классов без привязки графики. (Не забудте оставить где-нибудь в коде ссылки на них, что бы компилятор включил их в swf)
2. Создаете в загружаемом ролике символы в библиотеке и привязывете привязывает в Linkage классы точно с таким же именем как в родительском( при этом положите fla файл в отдельную паку, что бы классы не подхватились из файлов, а компилятор должен ругнуться "не могу найти соответствующих файлов")
3. В родительском приложении загружаете swf с указанием loaderContext applicationDomain.currentDomain
Код AS3:
loader =  new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_completeHandler);
loaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
loader.load(request, loaderContext);
В этом случае все классы из родительского swf заменят одноименные классы в загруженном клипе, но при этом они подхватят всю графику из загруженного

Это вам позволит работать со всем пременными ссылками на экземпляры на сцене как буд-то бы они лежали на сцене в основном классе.

Если вам необходимо обращение только на уровне root загруженного ролика, то все это проделаете лишь для одного класса.
Более простые на первый взгляд решения на практике оказываются еще запутанней

Добавлено через 8 минут
Да еще в загружемом ролике в PublishingSettings в настройках ActionScript3 необходимо убрать галочку в "Automatically declare stage instances"
__________________
...


Последний раз редактировалось Александр Мостовой; 06.04.2013 в 18:41.
Старый 06.04.2013, 18:43
BenderMTB вне форума Посмотреть профиль Отправить личное сообщение для BenderMTB Найти все сообщения от BenderMTB
  № 3  
Ответить с цитированием
BenderMTB

Регистрация: Feb 2011
Сообщений: 29
Чего то не работает. Всё ли я правильно сделал?
В загружаемых SWF убрал галочку "Automatically declare stage instances".
В главном ролике добавил несколько фрагментов для загрузки SWF. Фрагменты назвал object_lo_1, object_lo_2 и тд.

Фаили загружаю так:

Код AS3:
 var lr_url_req:URLRequest;
	var lr_loader:Loader;
	var lr_load_con:LoaderContext;
 
	var l_object_url:String;
 
	l_object_url = (root as MovieClip).get_object_url (i_object_type, i_object_group, i_object_n);
 
	lr_url_req = new URLRequest(l_object_url);
 
	lr_load_con = new LoaderContext(false, ApplicationDomain.currentDomain);
 
	lr_loader = new Loader();
	lr_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loader_event_progress);
	lr_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_event_complete);
	lr_loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, loader_event_io_error);
	lr_loader.load(lr_url_req, lr_load_con);
 
function loader_event_complete(e:Event):void {
 
	var lr_loader:Loader;
 
	MovieClip(e.target.content).is_object_param = is_object_param;
	MovieClip(e.target.content).gotoAndStop(2);
 
	lr_loader = e.currentTarget.loader as Loader;
 
	lr_loader.x = - int( lr_loader.width / 2 );
	lr_loader.y = - int( lr_loader.height / 2 );
 
	gotoAndStop(3);
	object_cont_swf.addChild(lr_loader);
 
}
Потом пытаюсь обратиться к загруженным SWF:

Код AS3:
object_lo_1.object_cont_swf.gotoAndStop (2);
Но чего то не выходит…

Старый 06.04.2013, 19:09
Александр Мостовой вне форума Посмотреть профиль Отправить личное сообщение для Александр Мостовой Посетить домашнюю страницу Александр Мостовой Найти все сообщения от Александр Мостовой
  № 4  
Ответить с цитированием
Александр Мостовой
 
Аватар для Александр Мостовой

Регистрация: Sep 2001
Адрес: Харьков
Сообщений: 305
Отправить сообщение для Александр Мостовой с помощью ICQ Отправить сообщение для Александр Мостовой с помощью Skype™
Цитата:
Фрагменты назвал object_lo_1, object_lo_2
Нет, я имел ввиду не давать им имя, а назначить классы в свойствах клипа в библиотки (тогда бы вы смогли создавть новые клипы с графикой при помощи new MyElementClass()).

И не очень понял что подразумеваете под
Цитата:
добавил несколько фрагментов
Но если вы пишете код в кадрах, тогда нужно сделать лишь 2 вещи:
1. В загружаемом ролике в свойство документа поставить MyLodedApp.
2. А рядом с родительским роликом создать класс MyLodedApp, в котором описать переменные с именами инстансов лежащих на сцене в загружаемом ролике (если хи нет, то не нужно)

Код AS3:
package
{
	import flash.display.MovieClip;
 
	public class MyLodedApp extends MovieClip
	{
		public var instanceOnScene:MovieClip; //Переменные - имена инмтансов лежащих на сцене в загружаемом ролике. Если их нет, то не нужно
 
		public function MyLodedApp()
		{
			super();
		}
	}
}
После загрузки графика подхватится из загруженного клипа, а код будет исполняться тот, который в классе, как если бы этот код был изначально в загруженном клипе

ПС. Для случая с кодом в кадрах впринципе можно придумать чуть проще без внешнего файла класса, а используя runtime shared librory, но я давно им не пользовался, поэтому предложу лишь указанное решение

Добавлено через 26 минут
А потом обратиться к загруженному классу следуюущим образом
Код AS3:
var loadedMC:MyLodedApp = lr_loader as MyLodedApp;
loadedMC.gotoAndStop (2);
Добавлено через 36 минут
Вообще, честно говоря, думаю большинству довольно сложно будет сориентироваться, т.к. привыкли к другому стилю програмирования и именования переменных
http://sourceforge.net/adobe/flexsdk...20Conventions/

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


Последний раз редактировалось Александр Мостовой; 06.04.2013 в 19:46.
Старый 06.04.2013, 20:00
BenderMTB вне форума Посмотреть профиль Отправить личное сообщение для BenderMTB Найти все сообщения от BenderMTB
  № 5  
Ответить с цитированием
BenderMTB

Регистрация: Feb 2011
Сообщений: 29
Цитата:
Вообще, честно говоря, думаю большинству довольно сложно будет сориентироваться, т.к. привыкли к другому стилю програмирования и именования переменных
Стиль программирования и именования переменных действительно перетекли из другого языка (так как в основном программирую не на AC3). Спасибо за полезную ссылочку))

Поэкспериментировал и получилось прировнять созданный Фрагмент к загруженному фрагменту и в дальнейшем обращается к нему так как будто он был изначально на сцене.

то есть в событие Event.COMPLETE прописал следующее:

Код AS3:
object_cont_swf.addChild(lr_loader);
	object_cont_swf = MovieClip(e.target.content) // object_cont_swf - просто пустой фрагмент;
И в дальнейшем можно обращатся к загруженному SWF так:
Код AS3:
object_lo_1.object_cont_swf.gotoAndStop (2);
Не знаю на сколько это правильно, но вроде работает.

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

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

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


 


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


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