Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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
Actionscript 3 AS3:加载外部swf';在带有参数的eventListeners的循环中_Actionscript 3_Addeventlistener - Fatal编程技术网

Actionscript 3 AS3:加载外部swf';在带有参数的eventListeners的循环中

Actionscript 3 AS3:加载外部swf';在带有参数的eventListeners的循环中,actionscript-3,addeventlistener,Actionscript 3,Addeventlistener,我试着制作一个连接amfphp和as3动画的应用程序。我从amfphp接收到一个数组,我在“if”语句中按某个变量对该数组进行排序。之后,我得到了两个数组,每个数组内部都有数组: var Array1:Array = [["http://url.to.swf", "http://url.to.link"], ["",""]...]; var Array2:Array = [["http://url.to.swf", "http://url.to.link"], ... ]; 之后,我运行一个函

我试着制作一个连接amfphp和as3动画的应用程序。我从amfphp接收到一个数组,我在“if”语句中按某个变量对该数组进行排序。之后,我得到了两个数组,每个数组内部都有数组:

var Array1:Array = [["http://url.to.swf", "http://url.to.link"], ["",""]...];
var Array2:Array = [["http://url.to.swf", "http://url.to.link"], ... ];
之后,我运行一个函数,读取该数组并将每个swf加载到后台:

ladujBajkiGorne(Array1);

function ladujBajkiGorne(polkaGorna:Array):void {
    for(var i=0; i<polkaGorna.length; i++) {
        Aktual = polkaGorna[i];
        var mLoader:Loader = new Loader();
        var mRequest:URLRequest = new URLRequest(String(Aktual[0]));
        mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, myfunction = function(e:Event):void { onLoadGorna( e, String(Aktual[1]) ); } );
        mLoader.load(mRequest);
    }
}
最后呢

function afterClick(e, arg3) {
   var url:URLRequest = new URLRequest(arg3);
   navigateToURL(url, "_self");
}
问题是,所有已加载的swf在链接中都具有相同的url。它在addEventListener语句中的ladujBajkiGorne函数中没有更改。我尝试了很多方法来改变这一点,但没有任何效果。有机会帮我吗?
非常感谢

问题在于完整事件的事件处理程序。调用将新函数作为事件处理程序返回的函数

首先,创建如下函数:

function getCompleteHandler(url:String):Function {
    return function (e:Event) {
        onLoadGorna(e, url);
    }
}
然后将其替换为:

mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, myfunction = function(e:Event):void { onLoadGorna( e, String(Aktual[1]) ); } );
据此:

mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, getCompleteHandler(Aktual[1]) );

现在应该可以了

问题在于加载程序完整处理程序的异步执行。将适当的参数传递给加载器并在处理程序上读取它会非常好。我提出了一个简单的解决方案,更正您的代码:

function ladujBajkiGorne(polkaGorna:Array):void {
    for(var i=0; i<polkaGorna.length; i++) {
        Aktual = polkaGorna[i];
        var mLoader:Loader = new Loader();
        var mRequest:URLRequest = new URLRequest(Aktual[0]+"?link="+Aktual[1]);
        mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, myfunction = function(e:Event):void { onLoadGorna( e ); } );
        mLoader.load(mRequest);
    }
}

function onLoadGorna(e):void {
   var link:String = e.currentTarget.parameters.link;
   userSwf = e.currentTarget.content;
   userSwf.buttonMode = true;
   userSwf.addEventListener(MouseEvent.CLICK, function(e:MouseEvent) { afterClick(e, link ); });
   booksMC.addChild(userSwf);

   var childName:String = booksMC.getChildAt(childs).name;
   booksMC.getChildByName(childName).x = posX;
   booksMC.getChildByName(childName).y = 0;

   posX += 218;
   childs++;
}
函数ladujBajkiGorne(polkaGorna:Array):void{

对于(var i=0;这是一个非常简单的解决方案。谢谢。这对我帮助很大!是的!这是一个非常好的解决方案。你的答案也是正确的,但是Serge他做得更简单。我很感谢你的时间。干杯
function ladujBajkiGorne(polkaGorna:Array):void {
    for(var i=0; i<polkaGorna.length; i++) {
        Aktual = polkaGorna[i];
        var mLoader:Loader = new Loader();
        var mRequest:URLRequest = new URLRequest(Aktual[0]+"?link="+Aktual[1]);
        mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, myfunction = function(e:Event):void { onLoadGorna( e ); } );
        mLoader.load(mRequest);
    }
}

function onLoadGorna(e):void {
   var link:String = e.currentTarget.parameters.link;
   userSwf = e.currentTarget.content;
   userSwf.buttonMode = true;
   userSwf.addEventListener(MouseEvent.CLICK, function(e:MouseEvent) { afterClick(e, link ); });
   booksMC.addChild(userSwf);

   var childName:String = booksMC.getChildAt(childs).name;
   booksMC.getChildByName(childName).x = posX;
   booksMC.getChildByName(childName).y = 0;

   posX += 218;
   childs++;
}