所以我希望通过制作我所拥有的所有按钮的数组来更快地编码,并且还创建索引号连接到每个按钮的数组的函数数组。
例如,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的最后一个值而不是分配它。您是否知道如何按照我的预期做到这一点?是不是可以更快地做到这一点,而不是指定按钮来做同样的事情?
答案 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]);
}