循环访问特定实例

时间:2018-09-07 12:19:32

标签: arrays for-loop addeventlistener

我刚刚开始学习AS3,遇到了我遇到的问题。我创建了一个名为MovieClip的{​​{1}},并在舞台上添加了三个实例:Buttonbutton1button2。我想要实现的是,当我将鼠标光标悬停在这些按钮之一上时,我希望所有其他按钮都可以执行某项操作。在我的示例中:将button3设置更改为0.2。我已经能够使用很多行代码来做到这一点,但是我想使用alphaarray语句将代码减少到最少。

for each

import flash.events.MouseEvent; stop(); var arrayButtons:Array = [button1, button2, button3]; for each (var btn in arrayButtons) { btn.addEventListener(MouseEvent.MOUSE_OVER, onBtn); arrayButtons.splice[this, 1]; } function onBtn(e:MouseEvent): void { for (var i:Number = 0; i < arrayButtons.length; i++) { arrayButtons[i].alpha = 0.2; } } 不起作用,但是我不知道应该将其更改为什么。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

拼接数组需要两个整数,this不会是整数。

即使this是您正在考虑的整数,它也会循环遍历并删除每个循环上的按钮,从而为您留下一个空数组。我可以看到您要执行的操作-为每个处理程序分配一个没有相关按钮的数组。

使用代码的一种简单方法是在onBtn处理程序的for循环中运行检查,以查看当前数组元素是否与滚动按钮(例如currentTarget)匹配。如果不是,请设置Alpha。

您不需要拼接数组。

import flash.events.MouseEvent;

stop();

var arrayButtons:Array = [button1, button2, button3];
for each (var btn in arrayButtons) {
    btn.addEventListener(MouseEvent.MOUSE_OVER, onBtn);

    // remove the splice
    // arrayButtons.splice[this, 1];
}

function onBtn(e:MouseEvent): void {
    for (var i:Number = 0; i < arrayButtons.length; i++) {

        // if the current array element is not the current button, set alpha
        if(arrayButtons[i].name != e.currentTarget.name ){
        arrayButtons[i].alpha = 0.2;
        }

    }
}

(mods:我无法弄清楚as3代码突出显示-您曾经能够突出显示as3语法,但是自从我尝试过以来已经有一段时间了?)