通过AS3中的事件侦听器循环

时间:2014-11-10 14:36:04

标签: actionscript-3 flash loops addeventlistener

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的初学者。

2 个答案:

答案 0 :(得分:1)

我认为它足够一个事件监听器和一些计数器。这样的事情(未经测试):

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++;
}

答案 1 :(得分:0)

嗯..你不应该这样做,在你的例子中,每次你点击box1,你将触发98次func(),并且它最后一次触发,我是等于98,我不认为这是你所期待的......

最好的方法是将你的i存储在某个地方,例如你可以将它存储到box1中(如果它是一个动画片段),那么你可以在你的画中轻松地检索,阅读和增加它( ) 方法。 这样你只需要在box1上有1个addEventListener。