在动作脚本3中循环播放事件,只获取最后一个号码

时间:2016-05-19 05:10:25

标签: arrays actionscript-3 loops flash events

所以我希望通过制作我所拥有的所有按钮的数组来更快地编码,并且还创建索引号连接到每个按钮的数组的函数数组。

例如,buttons[0],悬停的处理程序事件为button_over_funcs[0],而输出为button_out_funcs[0]

为了使其更清晰(因为英语不是我的第一语言),请查看我的代码:

var buttons:Array = [playbtn, tutorialbtn];
var button_over_funcs:Array = new Array();
var button_out_funcs:Array = new Array();

var i = 0;
for each(var j in buttons){
    j.buttonMode = true;

    button_over_funcs.push(function(e:MouseEvent){
        j.gotoAndPlay("hover");
    });
    button_out_funcs.push(function(e:MouseEvent){
        j.gotoAndPlay("out");
    });


    j.addEventListener(MouseEvent.ROLL_OVER, button_over_funcs[i]);
    j.addEventListener(MouseEvent.ROLL_OUT, button_out_funcs[i]);
    i++;
}

但是j总是会引用tutorialbtn,无论我将鼠标悬停在哪个按钮上。我也试过了for-in

var buttons:Array = [playbtn, tutorialbtn];
var button_over_funcs:Array = new Array();
var button_out_funcs:Array = new Array();

for(var j in buttons){
    buttons[j].buttonMode = true;

    button_over_funcs.push(function(e:MouseEvent){
        buttons[j].gotoAndPlay("hover");
    });
    button_out_funcs.push(function(e:MouseEvent){
        buttons[j].gotoAndPlay("out");
    });


    buttons[j].addEventListener(MouseEvent.ROLL_OVER, button_over_funcs[j]);
    buttons[j].addEventListener(MouseEvent.ROLL_OUT, button_out_funcs[j]);
}

两者似乎都一样。似乎actionscript总是引用j的最后一个值而不是分配它。您是否知道如何按照我的预期做到这一点?是不是可以更快地做到这一点,而不是指定按钮来做同样的事情?

2 个答案:

答案 0 :(得分:1)

重新发明轮子毫无意义。使用SimpleButton并完成它。

一般情况下:当您想要定义多个对象具有共同点的行为时,可以使用类。

答案 1 :(得分:0)

所以我自己找到了方法。如果你发现和我一样的问题,你可以看看。

var buttons:Array = [playbtn, tutorialbtn];
var button_over_funcs:Array = new Array();
var button_out_funcs:Array = new Array();

function addOver(ob){
    button_over_funcs.push(function(e:MouseEvent){
            ob.gotoAndPlay("hover");
    });
}
function addOut(ob){
    button_out_funcs.push(function(e:MouseEvent){
            ob.gotoAndPlay("out");
    });
}
function addEvent(ob){
    addOver(ob);
    addOut(ob);
}
for each(var j in buttons){
    addEvent(j)
}


for(var i = 0; i<= buttons.length - 1; i++){
    buttons[i].buttonMode = true;
    buttons[i].addEventListener(MouseEvent.ROLL_OVER, button_over_funcs[i]);
    buttons[i].addEventListener(MouseEvent.ROLL_OUT, button_out_funcs[i]);
}