События
Если вы собираетесь использовать 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 способа сделать это:
Вы создаете собственный собственный тип события . Это был бы самый чистый способ сделать это, и, возможно, самый рекомендуемый, если вы работаете над относительно большим проектом Flash.
Если вы используете только 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);
}