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

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

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

Регистрация: Sep 2012
Сообщений: 8
По умолчанию поиск классов в загружаемом swf

Добрый день! Есть проект в FD, который должен найти в загружаемой swf-ке нужные мне экземпляры класса WordChoice:
Код AS3:
public class Main extends MovieClip
	{
		private var ldr:Loader;
		private var wC:Array = [];
 
		public function Main():void
		{
			if (stage)
				init();
			else
				addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			ldr = new Loader();
 
			var urlReq:URLRequest = new URLRequest("../swf/testPattern.swf");
			ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
			ldr.load(urlReq);
			addChild(ldr);
		}
 
		private function loadComplete(e:Event):void
		{
 
			var obj:Object = e.target.content as Object;
 
			for (var i:uint = 0; i < obj.numChildren; i++)
			{
				if (obj.getChildAt(i) is WordChoice)
				{
					wC.push(obj.getChildAt(i));
				}
			}
			trace(wC.length);
		}
	}
Так вот, у меня в трейсе выводит ноль, хотя в подгружаемой флешке 4 объекта нужного класса. Теперь самое интересное: у двух моих знакомых программистов ЭТОТ же проект работает нормально, трейс выводит 4. Пробовал у себя на только поставленной ОС и свежеустановленном FD запустить - так же ноль. SDK, версия FD у меня и у моих знакомых совпадает. Ищу решение проблемы 4й день, уже зашел в тупик.

Старый 24.12.2012, 12:50
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Пакет, сигнатуры методов и прочее у класса WordChoice в подгружаемой swf и подгружающей должны совпадать.
__________________
тут я

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
можно для начала убрать проверку is WordChoice и проверить что туда вообще попадает
и вообще сначала проверить сколько там детей
Код AS3:
trace(obj.numChildren);
Так же может быть что секьюрити сендбокс у подружаемого файла другой

Старый 24.12.2012, 13:10
olegpon3 вне форума Посмотреть профиль Отправить личное сообщение для olegpon3 Найти все сообщения от olegpon3
  № 4  
Ответить с цитированием
olegpon3

Регистрация: Sep 2012
Сообщений: 8
Цитата:
Сообщение от КорДум Посмотреть сообщение
Пакет, сигнатуры методов и прочее у класса WordChoice в подгружаемой swf и подгружающей должны совпадать.
пакет "пустой", просто
Код AS3:
package
{
...
}
"Сигнатуры методов" это что?
Вообще вод код WordChoice:
Код AS3:
package
{
	import flash.display.MovieClip;
	public class WordChoice extends MovieClip 
	{			
		private var truth:Boolean = false;
		public function WordChoice() 
		{	
		}
		[Inspectable(defaultValue=false,type=Boolean)]
		public function set TruthValue(t:Boolean):void
		{		
			truth = t;			
		}		
		public function get TruthValue():Boolean
		{
			return truth;
		}	
	}
}
Добавлено через 5 минут
Цитата:
Сообщение от caseyryan Посмотреть сообщение
и вообще сначала проверить сколько там детей
Код AS3:
trace(obj.numChildren);
85 выводит (в подгружаемой флешке кроме WordChoice у меня куча TextField-ов)

PS вообще, может это важно, загружаемая testPattern.swf сделана в Flash CS6

Старый 24.12.2012, 13:25
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 5  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Подгружающей флэшке должен быть доступен класс WordChoice. Она не может определить ваш объект как инстанс WordChoice потому что она не знает что это такое. Скопипастите WordChoice в проект вашей флэшки так, чтобы package совпадал с package подгружаемого WordChoice, а если проекты находятся рядом, укажите через ClassPath путь к подгружаемому WordChoice.

Старый 24.12.2012, 13:34
olegpon3 вне форума Посмотреть профиль Отправить личное сообщение для olegpon3 Найти все сообщения от olegpon3
  № 6  
Ответить с цитированием
olegpon3

Регистрация: Sep 2012
Сообщений: 8
Цитата:
Сообщение от AlexLucas Посмотреть сообщение
Подгружающей флэшке должен быть доступен класс WordChoice.
Main.as и WordChoice.as лежат в одной папке src проекта, FD "знает" что такое WordChoice (выделяет его синим).

Старый 24.12.2012, 15:10
AlexLucas вне форума Посмотреть профиль Отправить личное сообщение для AlexLucas Найти все сообщения от AlexLucas
  № 7  
Ответить с цитированием
AlexLucas
[+1 05.11.12]
 
Аватар для AlexLucas

Регистрация: Feb 2011
Сообщений: 431
Ну раз у ваших знакомых всё работает, возможно у них настройки компилятора отличаются?
Насколько я знаю настройки которые вы делаете в FD остаются в файле проекта, может вы или они в конфиге что-то (не)прописали?

Старый 24.12.2012, 15:24
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 8  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Скорее securitySandBox отличается (хотя утверждать на 100% не могу). Надо флешку подкгружать в тот же секьюрити сендбокс, прописав его в контекст загрузки. Если это локальные тесты, без сервера, то обе флешки должны находиться в песочнице localTrusted
Проще говоря при загрузке добавить флешке контекст
Код AS3:
if (Security.sandboxType == Security.REMOTE) {
	var context:LoaderContext	= new LoaderContext();
	context.applicationDomain	= new ApplicationDomain(ApplicationDomain.currentDomain);
	loader.load(request, context);
} else {
	loader.load(request);
}
У меня этот способ работает. Файлы грузятся с удаленного сервера, и определяются по интерфейсу. Которые, без указания контекста при загрузке, не хочет признаваться "родным", хотя он есть в подгружающей флешке.

Старый 24.12.2012, 17:13
olegpon3 вне форума Посмотреть профиль Отправить личное сообщение для olegpon3 Найти все сообщения от olegpon3
  № 9  
Ответить с цитированием
olegpon3

Регистрация: Sep 2012
Сообщений: 8
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Проще говоря при загрузке добавить флешке контекст
Попробовал переписать так:
Код AS3:
public class Main extends MovieClip
	{
		private var ldr:Loader;
		private var wC:Array = [];
 
		public function Main():void
		{
			if (stage)
				init();
			else
				addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			ldr = new Loader();
 
			var urlReq:URLRequest = new URLRequest("../swf/testPattern.swf");
			ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);
			if (Security.sandboxType == Security.REMOTE)
			{
				var context:LoaderContext = new LoaderContext();
				context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
				ldr.load(urlReq, context);
			}
			else
			{
				ldr.load(urlReq);
			}
			addChild(ldr);
		}
 
		private function loadComplete(e:Event):void
		{
 
			var obj:Object = e.target.content as Object;
			for (var id:uint = 0; id < obj.numChildren; id++)
			{
				if (obj.getChildAt(id) is WordChoice)
				{
					wC.push(obj.getChildAt(id));
				}
			}
			trace(wC.length);
		}
	}
Не помогло, трейсит также ноль

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

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS3:
var obj:Object = e.target.content as Object
А почему так?

Разве у объекта есть свойство numChildren?
__________________
hauts.ru

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

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

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


 


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


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