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

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

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

Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
Attention Проблемный класс во внешнем SWF

Добрый день!
Возникла проблема слудющего характера. Подргужая внешнюю библиотеку в виде swf с классом внутри, главный SWF не находит этот класс ( причем ~ в 49 случаев из 50! ) в ней.:

Уверен, что пытаюсь сделать это правильно, так как если удалить этот класс со всеми потрохами ( он несколько многоуровневый и содержит другие классы внутри ) и заменить его простым, то главный SWF находит простой класс очень легко.

Чтобы наглядно показать ситуацию, я выдрал этот проблемный класс из проэкта, с его nтестовым лоадером и приложил к посту (cs5).
Main.swf грузит в себя bottomPanel.swf, пытаясь выдрать [BottomPanel] с помощью
Код AS3:
loader.contentLoaderInfo.applicationDomain.getDefinition('BottomPanel') as Class
но обламывается!

Пожалуйста, кто встречался с такой бедой, подскажите в чем может быть дело?!
Вложения
Тип файла: rar flasher_question.rar (584.6 Кб, 41 просмотров)

Старый 09.07.2010, 13:08
Xpb7 вне форума Посмотреть профиль Отправить личное сообщение для Xpb7 Найти все сообщения от Xpb7
  № 2  
Ответить с цитированием
Xpb7

Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
Люди, очень извиняюсь за то, что поднимаю тему, но этот вопрос достаточно критичен для меня. Я даже выложил исходник, чтобы можно было быстро узреть проблему! Нужели никто из гуру не знает ответа?

Старый 09.07.2010, 13:19
alexberkut вне форума Посмотреть профиль Отправить личное сообщение для alexberkut Найти все сообщения от alexberkut
  № 3  
Ответить с цитированием
alexberkut

Регистрация: Jun 2010
Адрес: Беларусь, Гродно
Сообщений: 58
getDefinition('BottomPanel')

ты ничего не добъешься, тк флеш ещё может не распарсил swf и не поднял классы.
Почитай про RSL (Runtime Shared Library). Может решит проблему

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
А нельзя это как-то без FLA оформить, а то так даже не понятно в чем проблема...
__________________
Hell is the possibility of sanity

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

Регистрация: Jul 2008
Адрес: Рига
Сообщений: 176
В смысле "без fla оформить"? Проблема в том, что класс описанный внутри одного подргужаемого swf, не может быть создан. Копаю в сторону Runtime Shared Library, но пока безуспешно. Примеры найденные мной работают, но как только я пытаюсь повотрить это с моим классом "BottomPanel" - fail.

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

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Ну вот например нету у меня Flash CS - не получится у меня вам помочь при всем желании, т.как я не знаю, что там у вас в этих FLA файлах. Судя по тому, что есть в SWF вы используете какие-то fl.* компоненты, а что вы с ними делаете - я понятия не имею, и декомпилировать не хочется.
__________________
Hell is the possibility of sanity

Старый 09.07.2010, 18:18
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 7  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
при подгрузке внешнего swf:

1. контекст явно указываешь?
2. на какое событие подписываешься?
__________________
Поймай яблоко 2!

Старый 09.07.2010, 18:37
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 8  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
Перенесите всё в классы (графику используйте только как asset'ы), добавляйте её в классах и используйте в классах.
Не приписывайте через flash-ide мувиклипам какие-либо классы, вся проблема у вас в этом. Вообще используйте fla только как контейнер для графики (чтобы её править внутри и всё).

У flash-ide очень странное поведение при подобном распределении функциональности мувиклипов.

Добавлено через 9 минут
если после загрузки подождать от 3 до 5 фреймов то ваш класс найдется.

проблему эту я до сих пор и не понял потому что init вызывается раньше комплита у loaderInfo, но после инита недоступны методы, код и объявленные классы. по прошествию же 5 фреймов легко можно их забрать.

Добавлено через 15 минут
Код AS3:
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");
				}
			}
		}
	}
}
__________________
Блог, Twitter
Брюзга.


Последний раз редактировалось mayakwd; 09.07.2010 в 18:54.
Старый 09.07.2010, 19:02
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 9  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
mayakwd, прямо не знаю что сказать.
скомпилил в отдельную swf графику, привязал к ней классы прямо во Flash IDE, добавил еще пару классов. подгружаю все это обычным способом, явно указываю контекст, жду INIT-а и сразу же использую классы из подгруженного swf.

что я делаю не так?
__________________
Поймай яблоко 2!

Старый 09.07.2010, 19:04
mayakwd вне форума Посмотреть профиль Отправить личное сообщение для mayakwd Посетить домашнюю страницу mayakwd Найти все сообщения от mayakwd
  № 10  
Ответить с цитированием
mayakwd
 
Аватар для mayakwd

Регистрация: Jul 2008
Адрес: t:2, x: 0.76
Сообщений: 553
Отправить сообщение для mayakwd с помощью ICQ Отправить сообщение для mayakwd с помощью Skype™
скомпильте то что у человека и проверьте =)
у меня поведение точно такое же как и у него. после ожидания 3-5 фреймов все работает. я не знаю что вы делаете не так и что я делаю не так.
__________________
Блог, Twitter
Брюзга.

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

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

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


 


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


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