Dip52, ваш код будет пытаться отписывать несуществующий слушатель. Слушателей вы удаляете в родителе, поэтому функция с названием onCLICK будет искаться в самом родителе, а не в кнопке. А нужно отписывать тот метод, который действительно подписан, то есть
BUTTON.onCLICK. Но onClick - приватный метод, к нему нет доступа из родителя.
Цитата:
|
Знаю что есть dispatchEvent
|
dispatchEvent - это диспетчеризация события, а не удаление слушателя.
Короче, я предлагаю сделать так
У вас в коде один существенный недстаток - каждая кнопка хранит в себе логику обработки нажатий других кнопок. Это, во-первых, здорово запутывает, а во-вторых усложняет работу с бОльшим количеством кнопок (для каждой новой кнопки придется лезть в класс и добавлять еще один case.
Добавлять событие нажатия на кнопку тоже лучше в родителе, который эти кнопки на себя вешает (на экран).
Я бы советовал пересмотреть общую структуру кода и сделать так:
Класс кнопки вообще убирайте, использовать будем только SimpleButton

Код AS3:
var buttonsArray:Array = new Array();
var listenersArray:Array = [button1Listener, button2Listener]; //Массив со слушателями, допустим что у нас 2 кнопки
//Тут ваш позишн еррей
for(var i:int = 0; i < positionArray.length; i++)
{
var button:SimpleButton = new SimpleButton();
//выставляем позишн, добавляем на экран и тд, а потом:
button.addEventListener(MouseEvent.CLICK, listenersArray[i]);
buttonsArray.push(button);
}
function button1Listener(e:MouseEvent):void
{
//код
removeAllListeners();
}
function button2Listener(e:MouseEvent):void
{
//код
removeAllListeners();
}
function removeAllListeners():void
{
for(var i:int = 0; i < listenersArray.length; i++)
{
buttonsArray[i].removeEventListener(MouseEvent.CLICK, listenersArray[i]);
}
}
Можно так же повесить два слушателя на кнопку, один для обработки нажатия, а второй для отписывания от события:

Код AS3:
...
for(var i:int = 0; i < positionArray.length; i++)
{
var button:SimpleButton = new SimpleButton();
//выставляем позишн, добавляем на экран и тд, а потом:
button.addEventListener(MouseEvent.CLICK, listenersArray[i]);
button.addEventListener(MouseEvent.CLICK, removeAllListeners);
buttonsArray.push(button);
}
function button1Listener(e:MouseEvent):void
{
//код
}
function button2Listener(e:MouseEvent):void
{
//код
}
function removeAllListeners(e:MouseEvent = null):void
{
for(var i:int = 0; i < listenersArray.length; i++)
{
buttonsArray[i].removeEventListener(MouseEvent.CLICK, listenersArray[i]);
}
}
И совет - не пишите все таки в кадрах..