|
|
|||||
Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
|
Проблемный класс во внешнем SWF
Добрый день!
Возникла проблема слудющего характера. Подргужая внешнюю библиотеку в виде swf с классом внутри, главный SWF не находит этот класс ( причем ~ в 49 случаев из 50! ) в ней.: Уверен, что пытаюсь сделать это правильно, так как если удалить этот класс со всеми потрохами ( он несколько многоуровневый и содержит другие классы внутри ) и заменить его простым, то главный SWF находит простой класс очень легко. Чтобы наглядно показать ситуацию, я выдрал этот проблемный класс из проэкта, с его nтестовым лоадером и приложил к посту (cs5). Main.swf грузит в себя bottomPanel.swf, пытаясь выдрать [BottomPanel] с помощью но обламывается! Пожалуйста, кто встречался с такой бедой, подскажите в чем может быть дело?! |
|
|||||
Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
|
Люди, очень извиняюсь за то, что поднимаю тему, но этот вопрос достаточно критичен для меня. Я даже выложил исходник, чтобы можно было быстро узреть проблему! Нужели никто из гуру не знает ответа?
|
|
|||||
Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
|
getDefinition('BottomPanel')
ты ничего не добъешься, тк флеш ещё может не распарсил swf и не поднял классы. Почитай про RSL (Runtime Shared Library). Может решит проблему |
|
|||||
Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
|
В смысле "без fla оформить"? Проблема в том, что класс описанный внутри одного подргужаемого swf, не может быть создан. Копаю в сторону Runtime Shared Library, но пока безуспешно. Примеры найденные мной работают, но как только я пытаюсь повотрить это с моим классом "BottomPanel" - fail.
|
|
|||||
Modus ponens
|
Ну вот например нету у меня Flash CS - не получится у меня вам помочь при всем желании, т.как я не знаю, что там у вас в этих FLA файлах. Судя по тому, что есть в SWF вы используете какие-то fl.* компоненты, а что вы с ними делаете - я понятия не имею, и декомпилировать не хочется.
__________________
Hell is the possibility of sanity |
|
|||||
Lorem ipsum
|
при подгрузке внешнего swf:
1. контекст явно указываешь? 2. на какое событие подписываешься?
__________________
Поймай яблоко 2! |
|
|||||
Перенесите всё в классы (графику используйте только как asset'ы), добавляйте её в классах и используйте в классах.
Не приписывайте через flash-ide мувиклипам какие-либо классы, вся проблема у вас в этом. Вообще используйте fla только как контейнер для графики (чтобы её править внутри и всё). У flash-ide очень странное поведение при подобном распределении функциональности мувиклипов. Добавлено через 9 минут если после загрузки подождать от 3 до 5 фреймов то ваш класс найдется. проблему эту я до сих пор и не понял потому что init вызывается раньше комплита у loaderInfo, но после инита недоступны методы, код и объявленные классы. по прошествию же 5 фреймов легко можно их забрать. Добавлено через 15 минут package { import flash.display.*; import flash.display.Sprite; import flash.display.Loader; import flash.system.ApplicationDomain; import flash.net.URLRequest; import flash.events.*; import flash.system.LoaderContext; public class Main extends Sprite { private var loader:Loader; private var appDomain:ApplicationDomain; public function Main() { var url1:URLRequest = new URLRequest('bottomPanel.swf'); trace( "main!" ); appDomain = new ApplicationDomain(); loader = new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onloaderComplete); loader.contentLoaderInfo.addEventListener(Event.INIT, onInit); loader.load(url1,new LoaderContext(false,appDomain)); } private var cont : DisplayObject; private function onloaderComplete(e:Event):void { cont = loader.content; trace ("hasDefinition after Complete: "+ (cont.loaderInfo.applicationDomain.hasDefinition("BottomPanel"))); this.addEventListener(Event.ENTER_FRAME, enterFrameHandler); } private function onInit (e : Event) : void { cont = loader.content; trace ("hasDefinition after Init: "+ (cont.loaderInfo.applicationDomain.hasDefinition("BottomPanel"))); } private var currFrame:uint = 0; private function enterFrameHandler(event : Event):void { if (currFrame++ < 5) { return; } else { trace ("hasDefinition after 5 frames: "+ (cont.loaderInfo.applicationDomain.hasDefinition("BottomPanel"))); this.removeEventListener(Event.ENTER_FRAME, enterFrameHandler); if (loader.contentLoaderInfo.applicationDomain.hasDefinition("BottomPanel")) { var BottomPanelClass:Class = loader.contentLoaderInfo.applicationDomain.getDefinition('BottomPanel') as Class; var bottomPanel:Object = new BottomPanelClass(); trace( 'done' ); } else { trace("BottomPanel has not found"); } } } } } Последний раз редактировалось mayakwd; 09.07.2010 в 18:54. |
|
|||||
Lorem ipsum
|
mayakwd, прямо не знаю что сказать.
скомпилил в отдельную swf графику, привязал к ней классы прямо во Flash IDE, добавил еще пару классов. подгружаю все это обычным способом, явно указываю контекст, жду INIT-а и сразу же использую классы из подгруженного swf. что я делаю не так?
__________________
Поймай яблоко 2! |
|
|||||
скомпильте то что у человека и проверьте =)
у меня поведение точно такое же как и у него. после ожидания 3-5 фреймов все работает. я не знаю что вы делаете не так и что я делаю не так. |
Часовой пояс GMT +4, время: 13:26. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|