Передача одной переменной из одного SWF в другой? - PullRequest
1 голос
/ 04 августа 2009

Теперь я понимаю, что раньше об этом просили перейти от Родителя к Ребенку, и это хорошо, но я хочу знать, как мне перейти от Ребенка SWF к Родителю? *

То, как я делаю это для родителей к ребенку:

в ваш родительский swf вы положили

_global.myvariable = blah;

В своего ребенка SWF вы бы положили

this. myvariable = _global. myvariable;

Но я не могу получить тот же эффект, когда пытаюсь передать его от Child к Parent.

Заранее благодарим за любую помощь / предложения.

Ответы [ 2 ]

4 голосов
/ 05 августа 2009

События

Если вы собираетесь использовать AS3, я бы посоветовал вам использовать события для установления правильной связи между родителем и ребенком.

Для каждого события (действия пользователя или чего-то еще), которое вы хотите перехватить, вы должны зарегистрировать так называемую функцию прослушивателя событий. Синтаксис следующий:

addEventListener(Type_of_event.Name_of_event, Name_of_function_YOU_define);

Функция, которая обрабатывает событие, выглядит следующим образом:

function event_handler(event:Event) {

 /* Do something with this event */

}

Если вы хотите узнать больше о событиях, вы можете взглянуть на эту страницу .

Добавление аргументов к событиям

Проблема с событиями в AS3 заключается в том, что по умолчанию нельзя передавать дополнительные аргументы обработчику событий. Но есть как минимум 2 способа сделать это:

  1. Вы создаете собственный собственный тип события . Это был бы самый чистый способ сделать это, и, возможно, самый рекомендуемый, если вы работаете над относительно большим проектом Flash.

  2. Если вы используете только flash IDE, работаете без класса документа и хотите написать процедурный код или хотите как можно больше придерживаться IDE и временной шкалы, вам следует использовать динамические переменные экземпляра.

Полагаю, для вашего случая подходящим решением будет второе.

Динамические переменные экземпляра

Динамические переменные экземпляра могут быть связаны только с классами, объявленными с атрибутом dynamic. Как только класс был определен как динамический, мы можем добавить новый динамический экземпляр к любому экземпляру этого класса с помощью стандартного оператора присваивания переменных.

var myInstance:DynamicClass= new DynamicClass();
myInstance.foo = "hello World"; // this won't cause any compile time errors

trace(myInstance.foo ); //returns hello World

В AS3, в отличие от предыдущих версий, только класс MovieClip определен как динамический: (* ​​1040 *

Пример

Возможно, та часть, которую вы ожидали больше всего ^ _ ^

Например:

у ребенка SWF

/*
child.swf
You have 3 movie clips on stage
*/

// Add dynamic instance variables to all 3 clips
mc_1.num = 1;
mc_2.num = 2;
mc_3.num = 3;

В родительском SWF

/*
parent.swf
*/

//Load the child.swf
var movieRequest:URLRequest = new URLRequest("child.swf");
var movieLoader:Loader = new Loader();

movieLoader.load(movieRequest);
addChild(movieLoader);
movieLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, movieComplete); 

//Once loaded in attach listeners here
function movieComplete(event:Event):void {  
    mc_1.addEventListener(MouseEvent.CLICK,onClickListener);
    mc_2.addEventListener(MouseEvent.CLICK,onClickListener);
    mc_3.addEventListener(MouseEvent.CLICK,onClickListener);
}

function onClickListener(e:MouseEvent):void{
    // Retreive the num : dynamically set variable
    trace(e.currentTarget.num);
}
0 голосов
/ 05 августа 2009

Посмотрите на класс LocalConnection. Это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...