Как применить функцию к каждому мувиклипу в массиве? - PullRequest
0 голосов
/ 03 января 2012

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

var dummies:Array = [];
var i:int = 300;
var j:int = 500;
var k:int = 0;

Затем я помещаю экземпляр триггера на сцену

var testaddbutton:AdditionButton = new AdditionButton();
addChild(testaddbutton);
testaddbutton.x = i;
testaddbutton.y = i;

Затем я описываю поведение триггера фильмаклип.Когда он щелкается, новый экземпляр фиктивного клипа помещается на сцену, вставляется в массив, и, наконец, определенным динамическим текстовым полям в созданном экземпляре присваиваются определенные значения (на самом деле это не точка)

testaddbutton.addEventListener(MouseEvent.CLICK, placedummy);

function placedummy(evt:MouseEvent):void {
    var dummy:Dummy = new Dummy();
    addChild(dummy);
    dummies.push(dummy);
    dummies[k].x=i + l*100;
    dummies[k].y=j;
    k++;
    dummy.dummyindex.text = k.toString();
}

Но тогда я сталкиваюсь с проблемой.Я хочу, чтобы манекены выполняли функцию при нажатии.Когда я пытаюсь добавить eventListener к пустышке ...

//dummy.addEventListener(MouseEvent.CLICK, showlifesigns);
//function showlifesigns(evt:MouseEvent):void {
//    trace ("pew");
//}

... я получаю очевидную ошибку: сцена 1, слой 'действия', кадр 1, строка 66 1120: доступ неопределенного свойства пустышка,Потому что манекены создаются внутри функции.У меня нет проблем с обращением к элементам в массиве 'dummies'.

Несмотря на то, что макеты создаются по одной и той же схеме, данные, хранящиеся в них, являются главной целью создания приложения.

Таким образом, вопрос заключается в следующем: как я могу применить функцию к каждому из этих макетов, которая выполняется по щелчку и влияет только на одного макета?

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 03 января 2012

Просто позвоните addEventListener, в то время как dummy все еще является действительной ссылкой - в той же функции, которую вы используете для создания каждого dummy элемента:

function placedummy(evt:MouseEvent):void { 
    var dummy:Dummy = new Dummy(); 
    addChild(dummy); 

    // Add the event listener right here!
    dummy.addEventListener(MouseEvent.CLICK, showlifesigns); 

    dummies.push(dummy); 
    dummies[k].x=i + l*100; 
    dummies[k].y=j; 
    k++; 
    dummy.dummyindex.text = k.toString(); 
} 
0 голосов
/ 03 января 2012

Область действия переменной dummy - это функция placedummy. Таким образом, вы не можете ссылаться на это за пределами этой функции. Вам нужно переместить слушателя, добавив код в функцию.

function placedummy(evt:MouseEvent):void {
    // other stuffs 
    dummy.addEventListener(MouseEvent.CLICK, showlifesigns);
}

Теперь все созданные dummy будут прослушивать событие. В прослушивателе событий showlifesigns вы можете использовать evt.target, чтобы получить конкретный dummy, по которому щелкают.

function showlifesigns(evt:MouseEvent):void {
    var clickedDummy:Dummy = evt.target as Dummy;
    // do stuff with clickedDummy
}
...