【问题标题】:Looping through event listeners in AS3在 AS3 中循环事件监听器
【发布时间】:2014-11-10 22:49:47
【问题描述】:
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 的初学者。

【问题讨论】:

  • 上述代码会导致问题,因为无法删除您的事件监听器。每次 return function(e:Event){...} 创建一个没有持久引用的函数的新实例时,任何对 removeEventListener() 的尝试都会失败

标签: actionscript-3 flash loops addeventlistener


【解决方案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++;
}

【讨论】:

    【解决方案2】:

    好吧..你不应该这样做,在你的例子中,每次点击box1,你会触发98次 func() ,最后一次触发,i等于98,我不'不认为这是你所期望的......

    最好的方法是将你的 i 存储在某个地方,例如,你可以将它存储到 box1 中(如果它是一个影片剪辑),然后你可以在你的 paint() 方法中轻松地检索、读取和增加它。 这样,您的 box1 上只需要有 1 个 addEventListener。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多