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

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

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

Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
По умолчанию Доступ к содержимому, загруженого извне клипа.

Доброе время всем. Вопрос вроде несложный, но решить не получается.
В главном классе документа командуется загрузка некоторого количества свф, которые содержат различные кнопки, текстфилды и т.д.
Все содержимое имеет уникальные инстансы. А как бы до него добраться из главного класса?
Вот фрагмент кода. Помогите пожалуйста разрулить проблемку.
Код AS3:
...
swfLdr = new Loader();
url = new URLRequest();
swfLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoaded);
...
url.url='History.swf';
swfLdr.load(url);
//
private function swfLoaded(e:Event):void{
			//
			hist=swfLdr.content as MovieClip;
			holder.addChild(hist);
			trace(hist.test)//Error 1119
//И клип с инстансом ok_btn недоступен (hist.ok_btn)
}

Старый 24.01.2009, 01:14
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 2  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Код:
trace(hist.test)//Error 1119
//И клип с инстансом ok_btn недоступен (hist.ok_btn)
так может надо
Код:
trace(hist.ok_btn)//NO Error 1119
//И клип с инстансом ok_btn доступен (hist.ok_btn)

Старый 24.01.2009, 02:31
MOHCTEP вне форума Посмотреть профиль Отправить личное сообщение для MOHCTEP Найти все сообщения от MOHCTEP
  № 3  
Ответить с цитированием
MOHCTEP

Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
Это у вас юмор такой?
Или я не особо ясно спросил?
test - это переменая в первом кадре 130-фреймового таймлайна клипа History.swf.
ok_btn - клип, расположенный там же. На него хотелось бы, как-то пресс-релизы отследить в главном классе.
Ни то, ни другое не отслеживается. Дубликат проекта в АС2 версии, прекрасно все видит


Последний раз редактировалось MOHCTEP; 24.01.2009 в 03:12.
Старый 24.01.2009, 09:12
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 4  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Цитата:
Сообщение от MOHCTEP Посмотреть сообщение
test - это переменая в первом кадре 130-фреймового таймлайна клипа History.swf
Код, написанный в кадре, превращается в приватный метод класса, который связан с мувиклипом, содержащим этот кадр. Соответственно, переменная, объявленная в кадре - локальная и умирает сразу после того как код в этом кадре исполнится. До test вы не достучитесь.


Код AS3:
hist=swfLdr.content as MovieClip;
Делая так, вы говорите, что класс загруженного swf - MovieClip, а значит, даже если бы этот swf имел какой-то расширенный класс, так вы сможете получить доступ только к свойствам, описанным в MovieClip.

А вот достать оттуда экземпляр можно:

Код AS3:
hist.getChildByName('ok_btn')
__________________
тонкий тролль, осеянный благодатью

Старый 24.01.2009, 12:52
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 5  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
так значит у вас 130 фреймов и в каждом написан код в кадре, а вам нужно получить переменную из первого кадра?
Для это нужно в подгруженном ролике перейти в первый кадр и остановить мувик.
по вашему коду так
Код:
hist=swfLdr.content as MovieClip;
hist.gotoAndStop(1);
теперь можно поработать с переменными находящимися в первом кадре и навешанными на него инстансами и прочее.

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

блогер
Регистрация: Mar 2007
Сообщений: 1,291
Записей в блоге: 5
Отправить сообщение для cleptoman с помощью ICQ
насколько помню доступ к свойствам и методам загруженного мувика получется не по событию Event.COMPLETE, а Event.INIT..не?

Старый 24.01.2009, 22:21
MOHCTEP вне форума Посмотреть профиль Отправить личное сообщение для MOHCTEP Найти все сообщения от MOHCTEP
  № 7  
Ответить с цитированием
MOHCTEP

Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
cleptoman
Event.COMPLETE срабатывает после Event.INIT
Alex Lexcuk
Не в каждом. В 1 кадре var test:Number=85;Ну и в 2-х, 3-х - синхро стопы. Они в супе роли не играют. 'ok_btn' доступен по длине таймлайна.
GAIKER
Ни так ни сяк, свойство недоступно. Причем, когда в листенере комплита пытаюсь запросить, что-то находящееся внутри контента, сразу вылетает ошибка (попытка обращения к несуществующему чему-то) и стопы в главном фильме игнорируются.
Запросы убираю - все грузится, стопится как надо, но нифига недоступно.
Вобщем, вот архив - посмотрите пожалуйста. Болеет кнопка "История".
Вложения
Тип файла: rar Work.rar (14.6 Кб, 38 просмотров)

Старый 24.01.2009, 23:45
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 8  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
Найдите 10 отличий (все работает)
Код:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.system.*;
	import flash.net.*;
	//
	public class Main extends MovieClip {
		//private var ;
		//public var ;
		private var swfLdr:Loader;
		private var url:URLRequest;
		private var holder:Sprite;
		//
		private var hist:Object;//просто объект
		//
		public function Main():void {
			this.stop();
			init();
		}
		//
		private function init():void {
			//this.stop();
			holder = new Sprite();
			addChild(holder);
			addChild(swfLdr = new Loader());
			url = new URLRequest();
			swfLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoaded);
			start_btn.addEventListener(MouseEvent.CLICK, clickHandler);
			history_btn.addEventListener(MouseEvent.CLICK, clickHandler);
			close_btn.addEventListener(MouseEvent.CLICK, clickHandler);
			//holder.addEventListener('PressButton',butPressed);
		}
		//
		//
		//
		//
		/*EVENT LISTENERS*/
		//
		private function clickHandler(e:MouseEvent):void {
			//
			trace(e.target, e.target.name, e.target.parent);//
			switch (e.target.name) {
				case "start_btn" :
					this.gotoAndStop('Game');
					//function
					break;
				case "history_btn" :
					this.gotoAndStop('History');
					url.url='HistoryAS3.swf';
					swfLdr.load(url);
					break;
				case "close_btn" :
					fscommand("quit");
					break;
			}
		}
		//
		private function swfLoaded(e:Event):void{
			//
			trace(e.target, e.target.content)
			hist=swfLdr.content;
			//holder.addChild(hist);
			//addChild(holder);
			trace("Трассируем кнопку "+hist.ok_btn);
			//trace(hist.getChildByName('ok_btn'));
			//var mc= hist.ok_btn as MovieClip;
			trace(hist);
		}
		//
		private function butPressed(e:MouseEvent){
			trace(e,e.target,e.currentTarget, e.currentTarget.name);
			for(var i=0;i<holder.numChildren;i++){
				trace(i,holder.getChildAt(i));
			}
		}
		//
	}
}
При нажатии на кнопку история наблюдаем в output
Код:
[object MovieClip] history_btn [object Main]
[object LoaderInfo] [object MainTimeline]
Трассируем кнопку [object MovieClip]
[object MainTimeline]
Я просто уже это делал, даже сделал туториал
http://www.dnadillo.dn.ua/fla/Load-ext-dog.html

Старый 25.01.2009, 00:22
MOHCTEP вне форума Посмотреть профиль Отправить личное сообщение для MOHCTEP Найти все сообщения от MOHCTEP
  № 9  
Ответить с цитированием
MOHCTEP

Регистрация: Dec 2002
Адрес: Живу вот где-то
Сообщений: 493
Alex Lexcuk
Спасибо!
Кочка то была еще в том, что "просто объект" не добавить в дисплей лист, стало быть - кина не будет. Но кнопка, теперь доступна. Ладно, сделаю покуда переменную сию нетипизированной - работает вроде.

Старый 25.01.2009, 00:35
Alex Lexcuk вне форума Посмотреть профиль Отправить личное сообщение для Alex Lexcuk Посетить домашнюю страницу Alex Lexcuk Найти все сообщения от Alex Lexcuk
  № 10  
Ответить с цитированием
Alex Lexcuk

блогер
Регистрация: Mar 2008
Адрес: Донецк_city
Сообщений: 1,094
Записей в блоге: 5
>>Спасибо
Не зачто.
>>не добавить в дисплей лист
Он добавляется так:
Код:
addChild(swfLdr = new Loader());
>>Не типизированная переменная
а,
Код:
private var hist:Object;//просто объект
объект это тип.

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

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

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


 


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


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