for循环中的as3事件侦听器将动态变量传递给函数

时间:2014-09-01 22:46:06

标签: actionscript-3 flash

我需要你的帮助。我有一个带数字的数组,我试图将动态变量传递给鼠标事件监听器中的函数。它有效,但不是我想要的。每当激活鼠标事件侦听器时,它都会传递该动态变量的最后一个值,而不是已设置的值。我试图在传递给函数时设置[" n1"]和[" n2"],但鼠标事件不会起作用(响应)。我该如何解决这个问题?这是我的代码:

var niz1:Array = [[1,2],[1,3],[3,4]];
var n,n1,n2;

for(n=0;n<3;n++){
    n1=niz1[n][0];
    n2=niz1[n][1];

    this["hovermc"+n1+"_"+n2].addEventListener(MouseEvent.ROLL_OVER, function(e:MouseEvent) : void {hover_effect_in(null,n1,n2,0,0);});
    this["hovermc"+n1+"_"+n2].addEventListener(MouseEvent.ROLL_OUT, function(e:MouseEvent) : void {hover_effect_out(null,n1,n2,0,0);});
}
function hover_effect_in(hovermc:MovieClip,h1:int,h2:int,h3:int,h4:int):void{
if(hovermc != null){
    hovermc.hoverbg.alpha=0.7;
}
if(h1 != 0 && h2 != 0 && h3 == 0 && h4 == 0){
    this["hovermc"+h1].hoverbg.alpha=0.7;
    this["hovermc"+h2].hoverbg.alpha=0.7;
}
}
function hover_effect_out(hovermc:MovieClip,h1:int,h2:int,h3:int,h4:int):void{
if(hovermc != null){
    hovermc.hoverbg.alpha=0;
}
if(h1 != 0 && h2 != 0 && h3 == 0 && h4 == 0){
    this["hovermc"+h1].hoverbg.alpha=0;
    this["hovermc"+h2].hoverbg.alpha=0;
}
}

1 个答案:

答案 0 :(得分:0)

您正在获取n1和n2的那些值,因为这些是事件函数执行时这些变量的值,即使在使用addeventlistener命令定义函数时它可能不同。

我无法想出一种简单的方法来执行您想要对代码执行的操作,但更实际的方法是让您的侦听器调用&#34; hover_effect_in&#34;直接,然后根据调用的mc的名称&#34; e.target.name&#34;,根据mc的名称应用您的数组值。因此,如果name = hovermc_1_2则n1 = 1且n2 = 2。因此,根据按钮名称,您可以在按钮处理程序中分配值。

或者,复杂的方法是为&#34; hovermc&#34;它包含所有基本代码,但每个类都带有一组niz1值,并分配给每个按钮mcs。