2012-01-03 2 views
0

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

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: Доступ неопределенного манекена собственности. Потому что манекены создаются внутри функции. У меня нет проблем с адресацией элементов в массиве «манекенов».

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

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

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

+0

Это ваш фактический код слушателя? Ошибка говорит, что 'userevent' не найден, и в коде, который вы опубликовали, нет' userevent'. – taskinoor

+0

jee, извините, я редактировал имена перед публикацией, забыл исправить это. –

+0

в порядке, исправлена ​​ошибка. –

ответ

1

Просто позвоните 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

Работал отлично, ура! –

+0

@Loki. Также обратите внимание на комментарий taskinoor относительно использования свойства event.target, чтобы определить, какой манекен был нажат. –

+0

Уже сделано, спасибо. Просто начинайте изучать AS3. Поэтому размещение функции eventenerener внутри функции казалось ... неправильным :) –

0

Объем переменной 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 
} 
+0

Заметим это, так как я, вероятно, столкнусь с этой проблемой (обращаясь к щелканному манекену), спасибо. –

Смежные вопросы