Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash AS3按值传递参数_Flash_Actionscript 3 - Fatal编程技术网

Flash AS3按值传递参数

Flash AS3按值传递参数,flash,actionscript-3,Flash,Actionscript 3,我对以下代码有问题: for (var i:Number=0; i<numFaces;i++){ var faceLoader:Loader = new Loader(); faceLoader.contentLoaderInfo.addEventListener( Event.INIT, function(fle:Event){ LoadCara(i,faceLoader); trace("LoadCara:" + i.toStr

我对以下代码有问题:

for (var i:Number=0; i<numFaces;i++){
    var faceLoader:Loader = new Loader();
    faceLoader.contentLoaderInfo.addEventListener( Event.INIT, 
    function(fle:Event){
        LoadCara(i,faceLoader);
        trace("LoadCara:" + i.toString());
    } );
}

function LoadCara(index:int,loader:Loader){
  if(index == 0)
  {
    trace("cara1:" + index.toString());
    cara1.removeChildAt(0);
    cara1.addChild(loader);
  }
  else if(index == 1)
  {
    cara2.removeChildAt(0);
    cara2.addChild(loader);
  }}
for(var i:Number=0;i这与是否“按值传递参数”无关。您声明的事件处理程序函数根本不将
i
变量作为参数访问。这就是为什么
i
的值不由for循环确定的原因

有几种方法可以处理这种情况。您可以创建一个扩展事件的新类,并在其中添加索引值


或者,您可以创建一个数组并使用所需的索引存储FaceLoader。然后通过在数组中查找匹配的索引,使用正确的索引调用LoadCara()。

还有另一种方法可以实现
它并不总是可取的,但有时很方便……

函数的内容属于函数,不要使用函数外部的变量。例如
cara1
cara2
,即
i
不属于您使用它的函数

但修复代码很简单:

for (var i:Number = 0; i < numFaces; i++) {
  var fLoader:Loader = new Loader();
  fLoader.contentLoaderInfo.addEventListener(Event.INIT, LoadCara(i, fLoader));
  trace("LoadCara:" + i.toString());
}

function LoadCara(index:int, loader:Loader):Function {
  return function(fle:Event):void {
    if (index == 0) {
      trace("cara1:" + index.toString());
      cara1.removeChildAt(0);
      cara1.addChild(loader);
    } else if (index == 1) {
      cara2.removeChildAt(0);
      cara2.addChild(loader);
    }
  }
}
然后,当您不再需要事件侦听器时,请执行以下操作:

for (var i:Number = 0; i < numFaces; i++) {
 fLoader.contentLoaderInfo.removeEventListener(Event.INIT, functionsLoadCara[i]);
}
for(变量i:Number=0;i
这种传递参数的方法更安全。在中的示例更好

for (var i:Number = 0; i < numFaces; i++) {
 fLoader.contentLoaderInfo.removeEventListener(Event.INIT, functionsLoadCara[i]);
}