Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   назначить Listener каждой картинке из массива (http://www.flasher.ru/forum/showthread.php?t=137539)

AndrewAndart 16.03.2010 12:05

назначить Listener каждой картинке из массива
 
Есть двухмерный массив Personag1Veshi ["kartinkaVeshi"] ["nameVeshi"]

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

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

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

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

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

Код AS3:

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.
Необходимо дёргать функцию, в области видимости которой сохранится ссылка на объект, перетаскивать который хотим.


Часовой пояс GMT +4, время: 01:33.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.