PDA

Просмотр полной версии : назначить Listener каждой картинке из массива


AndrewAndart
16.03.2010, 12:05
Есть двухмерный массив Personag1Veshi ["kartinkaVeshi"] ["nameVeshi"]

["kartinkaVeshi"] - содержит картинки вещей
["nameVeshi"] - содержит соответствующие имена вещей

По ходу программы массив Personag1Veshi изменяется. Некоторые вещи удаляются, некоторые добавляются.

Обновление Массива вещей на Экране происходит в единственном месте программы
(при условии что в него были внесены изменения) с помощью цикла.

ЗАДАЧА:
Каждая выведенная на экран картинка вещи должна уметь перетаскиваться мышкой.
И мы должны знать какое имя (["nameVeshi"]) у вещи которая у нас перетаскивается в данный момент.

Я для этого попытался циклом навесить по слушателю на каждую картинку
Но это не работает и вообще как то "подозрительно" выглядит.))
Может для решения этой задачи пользуются какой то особенной фишкой?


for (var i4:int = 1; i4 <=(KolichestvoVeshei); i4++) {

//выводим картинки вещей с интервалом по 50 пикселей по оси X
Personag1Veshi["kartinkaVeshi"][i4].x=i4*50;

//выводим картинки на уровне 500 пикселей по оси Y
Personag1Veshi["kartinkaVeshi"][i4].y=500;

//Добавляем вещь в список отображения
addChild(Personag1Veshi["kartinkaVeshi"][i4]);

//Каждая выведенная на экран картинка вещи может быть перетащена мышкой
//Для этого на каждую вещь персонажа вешаем слушатель

Personag1Veshi["kartinkaVeshi"][i4].addEventListener(MouseEvent.MOUSE_DOWN, PeretaskivaemVeshStart);
Personag1Veshi["kartinkaVeshi"][i4].addEventListener(MouseEvent.MOUSE_UP, PeretaskivaemVeshStop);

//Функции слушателей Вещей так НЕ РАБОТАЮТ
//TypeError: Error #1006: value не является функцией.

function PeretaskivaemVeshStart(event:MouseEvent):void {
trace("вещь тащим");
Personag1Veshi["kartinkaVeshi"][i4].startDrag();
}
function PeretaskivaemVeshStop(event:MouseEvent):void {
trace("вещь отпустили");
Personag1Veshi["kartinkaVeshi"][i4].stopDrag();
}
}

F1esk
16.03.2010, 12:44
так у вас кривой итератор i4 в момент вызова функций равен KolichestvoVeshei + 1.
Необходимо дёргать функцию, в области видимости которой сохранится ссылка на объект, перетаскивать который хотим.