![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2011
Сообщений: 29
|
Здравствуйте.
Я загрузил SWF на сцену с помощью Loader. В событие Event.COMPLETE добавил его на сцену с помощью addChild. Подскажите пожалуйста как обратиться в загруженному SWF. Например загруженный SWF состоит из нескольких кадров. При нажатие какой то кнопки в главном ролике мне нужно переплеснуть SWF на 1й кадр, при нажатие другой кнопки на 2й и тд. |
|
|||||
|
В загружаемом swf есть код или только графика?
В флешплеере в целях безопасности для каждого класса исполняемого кода (а классы создаются автоматически даже в случае написания кода во фреймах) присвоено определенное свойство SecurityDomain Может вам информация ниже покажется несколько запутанной, но рекомендую загружать медиаданные с loaderContect ом для текщего домена. А код всех классов используемых в загруженном клипе хранить в основном swf. А именно: 1. СОздаете в родительском приложении файлы классов без привязки графики. (Не забудте оставить где-нибудь в коде ссылки на них, что бы компилятор включил их в swf) 2. Создаете в загружаемом ролике символы в библиотеке и привязывете привязывает в Linkage классы точно с таким же именем как в родительском( при этом положите fla файл в отдельную паку, что бы классы не подхватились из файлов, а компилятор должен ругнуться "не могу найти соответствующих файлов") 3. В родительском приложении загружаете swf с указанием loaderContext applicationDomain.currentDomain loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loader_completeHandler); loaderContext = new LoaderContext(false, ApplicationDomain.currentDomain); loader.load(request, loaderContext); Это вам позволит работать со всем пременными ссылками на экземпляры на сцене как буд-то бы они лежали на сцене в основном классе. Если вам необходимо обращение только на уровне root загруженного ролика, то все это проделаете лишь для одного класса. Более простые на первый взгляд решения на практике оказываются еще запутанней ![]() Добавлено через 8 минут Да еще в загружемом ролике в PublishingSettings в настройках ActionScript3 необходимо убрать галочку в "Automatically declare stage instances"
__________________
... Последний раз редактировалось Александр Мостовой; 06.04.2013 в 18:41. |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 29
|
Чего то не работает. Всё ли я правильно сделал?
В загружаемых SWF убрал галочку "Automatically declare stage instances". В главном ролике добавил несколько фрагментов для загрузки SWF. Фрагменты назвал object_lo_1, object_lo_2 и тд. Фаили загружаю так: 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); } Но чего то не выходит… |
|
|||||
|
Цитата:
И не очень понял что подразумеваете под Цитата:
1. В загружаемом ролике в свойство документа поставить MyLodedApp. 2. А рядом с родительским роликом создать класс MyLodedApp, в котором описать переменные с именами инстансов лежащих на сцене в загружаемом ролике (если хи нет, то не нужно) package { import flash.display.MovieClip; public class MyLodedApp extends MovieClip { public var instanceOnScene:MovieClip; //Переменные - имена инмтансов лежащих на сцене в загружаемом ролике. Если их нет, то не нужно public function MyLodedApp() { super(); } } } ПС. Для случая с кодом в кадрах впринципе можно придумать чуть проще без внешнего файла класса, а используя runtime shared librory, но я давно им не пользовался, поэтому предложу лишь указанное решение ![]() Добавлено через 26 минут А потом обратиться к загруженному классу следуюущим образом Добавлено через 36 минут Вообще, честно говоря, думаю большинству довольно сложно будет сориентироваться, т.к. привыкли к другому стилю програмирования и именования переменных http://sourceforge.net/adobe/flexsdk...20Conventions/ Рекмоендую решить задачу для отдельного пустого проекта без лишнего кода, а потом применить к нему свой код, иначе сложно отделеть решаюмую задачу от других участков
__________________
... Последний раз редактировалось Александр Мостовой; 06.04.2013 в 19:46. |
|
|||||
|
Регистрация: Feb 2011
Сообщений: 29
|
Цитата:
Поэкспериментировал и получилось прировнять созданный Фрагмент к загруженному фрагменту и в дальнейшем обращается к нему так как будто он был изначально на сцене. то есть в событие Event.COMPLETE прописал следующее: object_cont_swf.addChild(lr_loader); object_cont_swf = MovieClip(e.target.content) // object_cont_swf - просто пустой фрагмент; Не знаю на сколько это правильно, но вроде работает. |
![]() |
![]() |
Часовой пояс GMT +4, время: 06:33. |
|
|
« Предыдущая тема | Следующая тема » |
|
|