Форум 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=210762)

Godwarlock 02.05.2015 05:45

Удаление всех слушателей классов
 
Создаю по циклу классы

Код AS3:

var param:Pozitiv;
 
for(var i:int = 0; i<100; i++)
{
 
param = new Pozitiv();
object.addChild(param);
 
}

В классе Pozitiv есть слушатели, к примеру клик мыши на объекте. Там же есть и его удаление после клика. Но у меня сложилась такая проблема, что по нажатию на любой объект, удаляется слушатель только внутри конкретно этого класса, остальные же продолжают работать. Всю ночь уже сижу, кучу вариантов перепробывал - не фига не получается. Дело в том, что после нажатия кнопки на один объект, остальные объекты(в классах Pozitiv) удаляются из одного общего контейнера в которых они лежат, после чего классы регенерируются выше описанным образом, но уже другим порядком и в общем то изменения там есть. Так вот какого то фига, получается так, что после того как они отрегенерируются(вроде казалось совершенно другие экземпляры и другие объекты), если нажать на объект, срабатывает одновременно 2 слушателя, если нажать 100 раз, соответственно после регенерации 100 раз сработает слушатель за один клик. Подскажите решение, что-то вообще всю голову сломал

pytachok 02.05.2015 11:21

Цитата:

В классе Pozitiv есть слушатели, к примеру клик мыши на объекте. Там же есть и его удаление после клика. Но у меня сложилась такая проблема, что по нажатию на любой объект, удаляется слушатель только внутри конкретно этого класса, остальные же продолжают работать.
Ну так и должно быть. Событие клика отработало только на этом объекте.
Следовательно остальные события у других объектах остаются и вы их удаляете. При удалении вызываете функцию, которая и будет удалять все слушатели.
Код AS3:

Или пользуйся addEventListener(Event.REMOVED)

.
Вообще я бы не советовал в каждом классе создавать слушателя.
У меня везде, для примера, используется один слушатель события мыши. Далее я уже смотрю по имени объекта и делаю что мне нужно (допустим кнопки, каждой даю имя и все, не нужно кнопке индивидуальный слушатель). Если же объектов много идентичных, то проверяю что этот объект тот который мне нужен.
Для вашего примера это выглядело бы так:
Код AS1/AS2:

var param:Pozitiv;
 
for(var i:int = 0; i<100; i++)
{
        param = new Pozitiv();
        object.addChild(param);
}
object.addEventListener(MouseEvent.CLICK, thisClick);
 
function thisClick(e:MouseEvent):void
{
        if (e.target is Pozitiv)
        {
                someFunction();
        }
}


caseyryan 02.05.2015 11:24

Я не вижу в этом коде никакого добавления слушателей. Приведенный код никакого отношения к проблеме не имеет.
п.с. Сразу советую научиться различать класс и экземпляр класса. То, что у вас описано, относится к экземплярам класса, а не к классам. Эта разница критически важна.
п.п.с. перепробовал пишется через О, а не через Ы

Godwarlock 02.05.2015 23:52

Спасибо. Воспользовался способом создания функции по удалению всех слушателей. Хотя по сути надо было удалить только один слушатель.


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

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