Ответ 1
Ноль. Если вы вызываете addEventListener, используя одни и те же аргументы более одного раза, все последующие вызовы после первого "молча проваливаются". Вызовите add столько раз, сколько хотите, но этот одиночный удалите протрите слушателя.
EDIT: Еще одна вещь, о которой следует помнить, заключается в том, что нет никакого штрафа за вызов нескольких одинаковых функций removeEventListener() на одном и том же объекте, за исключением ненужных служебных накладных расходов. Никакой смертельной ошибки не произойдет, она просто "тихо провалится" почти так же, как и повторные идентичные вызовы addEventListener.
РЕДАКТИРОВАТЬ 2: ответить @ThomasM:: если ваш слушатель дважды срабатывает, то у вас нет точно такого же слушателя. Попробуйте поместить этот быстрый и грязный код в кадр 1 во фле, в котором есть один квадратный мувиклип в качестве ребенка:
import flash.events.*
function foo(e):void{
trace("hi");
}
this.addEventListener(MouseEvent.CLICK,foo);
this.addEventListener(MouseEvent.CLICK,foo);
this.addEventListener(MouseEvent.CLICK,foo);
Обратите внимание, что ваш результат при щелчке мувиклипа - это точно одно действие трассировки.
Теперь добавьте эту строку в конец кода
this.removeEventListener(MouseEvent.CLICK,foo);
Даже если вы добавили foo в качестве слушателя для нажатия 3 раза, этот вызов полностью уничтожит слушателя.
Итак, если вы столкнулись с проблемой, когда "тот же самый слушатель" срабатывает дважды, то, вероятно, что вы делаете, это примерно так:
this.addEventListener(MouseEvent.CLICK, function(e){
trace("hi");
});
this.addEventListener(MouseEvent.CLICK, function(e){
trace("hi");
});
Это будет "дважды срабатывать", потому что функции слушателя НЕ ЯВЛЯЮТСЯ ТОЛЬКО. Они выполняют те же действия, но не ссылаются на одинаковые позиции в памяти. Они не указывают на один и тот же функциональный объект. Кроме того, это очень плохая практика, потому что у вас нет возможности фактически удалить этих слушателей. Как бы вы это сделали? У вас нет ссылок на них.