Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Слушатель для объектов с разными именем (http://www.flasher.ru/forum/showthread.php?t=210403)

Godwarlock 11.03.2015 02:00

Слушатель для объектов с разными именем
 
Возник такой вопрос. Есть массив такого вида
Код AS3:

arr = [{"id":1, "val":2}, {"id":2, "val":5}];

Далее я гененирую по идишникам экземпляры класса

Код AS3:

for (i = 0; i < arr.length; i++)
                        {
                        TS = new TestClass(arr[i]['id'] , this);
                        TS.x = 500 + 50 * i;
                        TS.y = 365;
                        TS.name = arr[i]['id'],[i]['val'];
                        addChild(TS);
                        TS.addEventListener(MouseEvent.CLICK, dimObject);
                        }
 
private function dimObject(event:MouseEvent):void
                {
        trace(TS.name);
}

Создается две картинки. Суть такова. Мне надо определить номер id объекта на который кликнули и его val. Попробовал таким способом, но отображает только ид последнего созданного объекта, на какой-бы из двух объектов не щелкнули. Подскажите решение.

neonoviiwolf 11.03.2015 02:04

Я бы просто в самой картинке ввёл бы переменную, которая содержит её id

Godwarlock 11.03.2015 02:10

Но все равно, как тогда прикрутить слушатель к 300 таким картинкам?) Суть в том, что у меня судя по всему слушатель прикручивается только к последнему объекту или к обоим, но trace регаирует только на последний.

neonoviiwolf 11.03.2015 02:24

я честно говоря не особо разбираюсь в таком создании массивов
Код AS3:

TS = new TestClass(arr[i]['id'] , this);
TS.name = arr[i]['id'],[i]['val'];

эти строчки для меня остаются пока загадкой :)
Но я подобную проблему решал, тем, что слушатель вешал к функции внутри объекта
грубо говоря dimObject должна находиться в расширенном классе вашей картинки

Godwarlock 11.03.2015 02:30

TS.name = arr[i]['id'],[i]['val'];
Это просто пока единственный для меня способ, присвоить имени TS id и val экземпляру TS) Я просто решил избежать возможности создания большого количества слушателей и функций. Картинок может быть даже не 10, а сотни. Для каждой создавать слушатель и свою функцию это слишком ресурсозатратно. Нужен способ попроще и эффективнее. Суть массива такого в том, что мы имеем для каждого объекта свои параметры, в моем случае это id и val. По сути, мне надо по клику на картинку, получить как раз значения параметров которые ей принадлежат. Но пока безуспешно)

faraday 11.03.2015 02:31

Решение задачи в упрощенном виде, подход не однозначный.
Код AS3:

for (var i:int=0;i<10;i++){
var item:MovieClip=new MovieClip();
item.id=i;
addChild(item);
item.addEventListener('click', clickHandler);
}
function clickHandler(e:Event){
trace((e.target as MovieClip).id);
}


neonoviiwolf 11.03.2015 02:33

ну тогда слушатель определяет координаты клика, а дальше запускается цикл всех объектов и проверяется, попадает ли кто в эти координаты

faraday 11.03.2015 02:37

Цитата:

Сообщение от Godwarlock (Сообщение 1179833)
TS.name = arr[i]['id'],[i]['val'];
Это просто пока единственный для меня способ, присвоить имени TS id и val экземпляру TS) Я просто решил избежать возможности создания большого количества слушателей и функций. Картинок может быть даже не 10, а сотни. Для каждой создавать слушатель и свою функцию это слишком ресурсозатратно. Нужен способ попроще и эффективнее. Суть массива такого в том, что мы имеем для каждого объекта свои параметры, в моем случае это id и val. По сути, мне надо по клику на картинку, получить как раз значения параметров которые ей принадлежат. Но пока безуспешно)

Единсвтвенный способ - это слушать клик на каждую картинку. Другого и быть не может. Для успокоения можно поместить все картинки в общий контейнер, и добавить один слушатель на него. Но внутри все будет так же. Не думайте что это сильно грузит систему, на событиях построенно много чего и посерьезнее, главное не забывать удалять обработчики.

KBAC 11.03.2015 02:38

Одна из самых распространённых ошибок и непониманий вообще что и когда лежит в переменных и как вообще что работает.

То что лежит в TS (на что TS ссылается) определяется в цикле сейчас.

В слушателе должно быть что-то типа
Код AS3:

trace((event.target as TestClass).name)


neonoviiwolf 11.03.2015 02:40

даж полегче придумал, прилепляем к мышке невидимый объект и когда "клик" запускаем функцию, которая каждую картинку hittest c невидимым


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

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