Циклический просмотр слушателей событий в AS3

for (var i=0; i<=98; i++) {
    box1.addEventListener(MouseEvent.CLICK, func(i));
}
function func(i:int):Function{
    return function paint(e:MouseEvent):void{
        var myColorTransform:ColorTransform = new ColorTransform();
        if (i%4==0) {
            myColorTransform.color = 0xFF0000;
        }
        else if (i%4==1) {
            myColorTransform.color = 0x0000FF;
        }
        else if (i%4==2) {
            myColorTransform.color = 0x00FF00;
        }
        else if (i%4==3) {
            myColorTransform.color = 0xFFFF00;
        }
        box1.transform.colorTransform = myColorTransform;
    }
}

Я хочу запустить цикл через прослушиватели событий таким образом, чтобы всякий раз, когда я щелкаю по объекту, его цвет трансформируется в следующий. Приведенный выше код просто меняет цвет один раз и создает цвет для последнего значения i (98), которое является зеленым. Пожалуйста помоги. Я новичок в ActionScript.


person Anubhav Baweja    schedule 10.11.2014    source источник
comment
Приведенный выше код может привести к проблемам, так как невозможно удалить прослушиватели событий. Каждый раз, когда вы return function(e:Event){...} создаете новый экземпляр функции без постоянной ссылки, любая попытка removeEventListener() потерпит неудачу.   -  person CyanAngel    schedule 10.11.2014


Ответы (2)


Думаю, хватит одного слушателя событий и какого-нибудь счетчика. Примерно так (не проверял):

var clickCounter:uint = 0;

box1.addEventListener(MouseEvent.CLICK, onBoxClick);

function onBoxClick(event:MouseEvent):void {
    var myColorTransform:ColorTransform = new ColorTransform();
    if (clickCounter%4==0) {
        myColorTransform.color = 0xFF0000;
    }
    else if (clickCounter%4==1) {
        myColorTransform.color = 0x0000FF;
    }
    else if (clickCounter%4==2) {
        myColorTransform.color = 0x00FF00;
    }
    else if (clickCounter%4==3) {
        myColorTransform.color = 0xFFFF00;
    }
    box1.transform.colorTransform = myColorTransform;
    clickCounter++;
}
person Crabar    schedule 10.11.2014

Что ж ... вы не должны делать это таким образом, в вашем примере каждый раз, когда вы щелкаете box1, вы запускаете 98 раз func (), и в последний раз, когда он запускается, i равно 98, я не думаю это то, что вы ожидаете ...

Лучший способ сделать это - сохранить где-нибудь свой i, вы можете сохранить его, например, в box1 (если это мувиклип), затем вы можете легко получить, прочитать и увеличить его в своем методе paint (). Таким образом, у вас должен быть только 1 addEventListener на вашем box1.

person Notsu    schedule 10.11.2014