0

我想简化以下代码:

    _root.botao1.onRelease = function(){
        follow=1;
    }
    _root.botao2.onRelease = function(){
        follow=2;
    }
    _root.botao3.onRelease = function(){
        follow=3;
    }

我试图通过以下代码实现它:

for(i=0;i<3;i++){
    _root['botao'+i].onRelease = function(){
        follow=i;
        trace(follow);
    }
}

虽然它应该可以工作,但当我追溯当前的跟随值时,它总是返回“3”,如果我实际点击 1 或 2,则没有仪表。

如何修复?

4

1 回答 1

0

所有按钮打印相同值的原因是因为所有 onRelease 函数都引用相同的变量 i,当循环完成执行时,该变量包含值 3。

一个简单的解决方案是简单地将循环的每次迭代 i 的值存储到可点击对象上的变量中:

for(i = 0; i < 3; i++) {
   var mc : MovieClip = _root['botao' + i];
   mc.follow = i + 1;
   mc.onRelease = function(){
      trace(this.follow);
   }
}

另一个可能有点难以掌握的解决方案是定义一个匿名函数并立即调用它(注意最后的 ())。这个匿名函数将 i 的当前值存储在一个名为 follow 的变量中,然后返回另一个匿名函数(包含您想要在触发 onRelease 时运行的逻辑)。返回的函数可以访问以下变量:

for(i = 0; i < 3; i++) {
    _root['botao' + i].onRelease = (function() {
        var follow = i + 1;
        return function(){
            trace(follow);
        }
    })();
} 
于 2013-05-09T21:35:57.130 回答