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

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

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

Регистрация: Dec 2009
Сообщений: 16
По умолчанию Обращение в функциям основного клипа из подгруженного swf

Доброго времени суток!
Ситуация такая:
В основной ролик загружаю внешний swf через addChild(mc).
Далее из этого внешнего swf мне нужно обратиться к функциям и свойствам основного ролика.
Как это сделать?

Старый 13.04.2011, 18:25
_sestra_ вне форума Посмотреть профиль Отправить личное сообщение для _sestra_ Найти все сообщения от _sestra_
  № 2  
Ответить с цитированием
_sestra_
 
Аватар для _sestra_

Регистрация: Dec 2005
Сообщений: 219
Отправить сообщение для _sestra_ с помощью ICQ Отправить сообщение для _sestra_ с помощью Skype™
В основной:
Код AS3:
var loader:Loader = new Loader();
loader.load(new URLRequest("url"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
 
function onComplete (e:Event):void
{
	// передаем внешней SWF ссылку на себя
	e.target.content.parent = this;
}
function MyFunction ():void
{
	trace('goal');
}
Во внутренней:
Код AS3:
function set parent (object:DisplayObject):void
{
	object.MyFunction();
}
Вкратце так.
__________________
Счастье - это хорошее здоровье и плохая память


Последний раз редактировалось _sestra_; 13.04.2011 в 18:29.
Старый 13.04.2011, 18:40
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 3  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
e.target.content.parent = this;
Эмм?.. это как? И откуда у loaderInfo свойство content?
__________________
...вселенская грусть

Старый 13.04.2011, 18:44
_sestra_ вне форума Посмотреть профиль Отправить личное сообщение для _sestra_ Найти все сообщения от _sestra_
  № 4  
Ответить с цитированием
_sestra_
 
Аватар для _sestra_

Регистрация: Dec 2005
Сообщений: 219
Отправить сообщение для _sestra_ с помощью ICQ Отправить сообщение для _sestra_ с помощью Skype™
Цитата:
Эмм?.. это как? И откуда у loaderInfo свойство content?
Здрасте приехали:
Цитата:
Пакет flash.display
Класс public class LoaderInfo
Наследование LoaderInfo EventDispatcher Object
...
content : DisplayObject
[только для чтения] Загруженный объект, связанный с данным объектом LoaderInfo.
это:
Код AS3:
e.target.content.parent = this;
заменить на это:
Код AS3:
e.target.content.setParent(this);
если уж на то дело пошло )
__________________
Счастье - это хорошее здоровье и плохая память


Последний раз редактировалось _sestra_; 13.04.2011 в 18:49.
Старый 13.04.2011, 18:57
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 5  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
бред какой-то
__________________
Отряд Котовскага

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

Регистрация: Dec 2005
Сообщений: 219
Отправить сообщение для _sestra_ с помощью ICQ Отправить сообщение для _sestra_ с помощью Skype™
Цитата:
Сообщение от Котяра Посмотреть сообщение
бред какой-то
Содержательный комментарий
__________________
Счастье - это хорошее здоровье и плохая память

Старый 13.04.2011, 19:12
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 7  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Сори, тупанул.
Однако, всяко лучше делать это через интерфейс:
Код AS3:
package  {
 
	import flash.events.IEventDispatcher;
 
	/**
	 * Интерфейс для основного класса загружаемой флешки
	 * 
	 * @author gloomyBrain
	 */
	public interface IContent extends IEventDispatcher {
 
		function biteMe():String;
 
	}
 
}
Главный класс загружаемой флешки
Код AS3:
public class Main extends Sprite implements IContent {
 
	public function Main() {
		...
	}
}
Если же нам нужно о чем-то попросить главный модуль из загружаемого, мы можем сделать это через sharedEvents:
Код AS3:
// в главном классе загружаемой флешки
super.loaderInfo.sharedEvents.dispatchEvent();
И загружающая флешка:
Код AS3:
package {
 
	import flash.display.Loader;
	import flash.display.LoaderInfo;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.errors.IllegalOperationError;
	import flash.events.Event;
	import flash.net.URLRequest;
	import flash.system.LoaderContext;
 
	/**
	 * 
	 * 
	 * @author gloomyBrain
	 */
	public class Main extends Sprite {
 
		public function Main() {
 
			if (super.stage) this.init();
			else super.addEventListener(Event.ADDED_TO_STAGE, init);
 
		}
 
		private function init(event:Event = null):void {
 
			super.removeEventListener(Event.ADDED_TO_STAGE, init);
			super.stage.scaleMode = StageScaleMode.NO_SCALE;
			super.stage.align = StageAlign.TOP_LEFT;
 
			// entry point
 
			var loader:Loader = new Loader();
			var request:URLRequest = new URLRequest("...");
			var context:LoaderContext = new LoaderContext();
 
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
			loader.load(request, context);
 
		}
 
		private function onComplete(event:Event):void {
 
			var loaderInfo:LoaderInfo = event.currentTarget as LoaderInfo;
			loaderInfo.removeEventListener(event.type, arguments.callee);
 
			var content:IContent = loaderInfo.content as IContent;
			if (!content) throw new IllegalOperationError("Загруженный контент не реализует IContent!");
 
			// вот тут можем управлять загруженной флешкой из основной
			content.biteMe();
			// или подписаться на события
			content.loaderInfo.haredEvents.addEventListener(someEvent, someListener);
 
		}
 
		private function someListener(event:someEvent):void {
 
			(event.currentTarget as IContent).biteMe();
 
		}
 
	}
 
}
Интерфейс должен быть вкомпилен в обе флешки
__________________
...вселенская грусть

Старый 14.04.2011, 10:25
L_Ghost вне форума Посмотреть профиль Отправить личное сообщение для L_Ghost Найти все сообщения от L_Ghost
  № 8  
Ответить с цитированием
L_Ghost

Регистрация: Dec 2009
Сообщений: 16
to _sestra_:
Вы описали обращение в функции родителя, это понятно, а если нужно обратиться к функциям произвольного объекта из основного клипа?

Добавлено через 3 минуты
to gloomyBrain:
сорри, но с Вашим кодом мне нужно разбираться. С ходу не пойму. Не тот у меня уровень работы с as3.

Старый 14.04.2011, 10:29
_sestra_ вне форума Посмотреть профиль Отправить личное сообщение для _sestra_ Найти все сообщения от _sestra_
  № 9  
Ответить с цитированием
_sestra_
 
Аватар для _sestra_

Регистрация: Dec 2005
Сообщений: 219
Отправить сообщение для _sestra_ с помощью ICQ Отправить сообщение для _sestra_ с помощью Skype™
Цитата:
Сообщение от L_Ghost Посмотреть сообщение
to _sestra_:
Вы описали обращение в функции родителя, это понятно, а если нужно обратиться к функциям произвольного объекта из основного клипа?
Сохраняйте ссылку на объект и обращайтесь к его методам
Код AS3:
function onComplete (e:Event):void
{
	// сохраняем ссылку
	var object:DisplayObject = e.target.content as DisplayObject;
	// обращаемся
	object.doSomething();
}
__________________
Счастье - это хорошее здоровье и плохая память

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

Регистрация: Dec 2009
Сообщений: 16
[quote=_sestra_;989255]Сохраняйте ссылку на объект и обращайтесь к его методам
Это обращение в функциям объекта, а мне нужно из подгруженного объекта обратиться к функциям произвольных объектов в основном клипе (видимо по именам этих объектов).

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

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

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


 


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


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