如何知道哪一个触发了eventListener

时间:2012-10-27 00:28:07

标签: image actionscript loading event-listener

我在游戏开始前加载游戏的图像。因此,main函数将图像链接发送到图像加载对象。当我在main中执行image.load(link)时,这就是我的图像加载对象中发生的事情:

    public function charge(str:String, img_x:int, img_y:int, layer:Sprite):void
    {
        trace("load");
        urlRequest = new URLRequest(str);

        loaderArray[cptDemande] = new Loader();
        loaderArray[cptDemande].contentLoaderInfo.addEventListener(Event.COMPLETE, loading_done);
        loaderArray[cptDemande].load(urlRequest);

        posX[cptDemande] = img_x;
        posY[cptDemande] = img_y;

        layerArray[cptDemande] = layer;

        cptDemande++;           
    }

参数img_x:int,img_y:int和layer:Sprite与之后显示图像有关。我正在使用数组,以便在加载完成后将图像添加到舞台上。

事件监听器触发此函数:

    public function loading_done(evt:Event):void
    {
        cptLoaded++;
        evt.currentTarget.contentLoaderInfo.removeEventListener(Event.COMPLETE, loading_done);
        if((cptDemande == cptLoaded) && (isDone == true))
        {
            afficher();
        }
    }

我想要的是能够定位好的加载器来删除事件监听器。我目前使用的内容(evt.currentTarget)不起作用并生成错误代码:

  

1069在flash.display.LoaderInfo上找不到属性数据且没有默认值

1 个答案:

答案 0 :(得分:1)

跟踪evt.currentTarget表明currentTargetLoaderInfo属性。尝试更新您的代码,如下所示:

public function loading_done(evt:Event):void
{
    cptLoaded++;

    // Current target IS the contentLoaderInfo
    evt.currentTarget.removeEventListener(Event.COMPLETE, loading_done);
    //evt.currentTarget.contentLoaderInfo.removeEventListener(Event.COMPLETE, loading_done);
    if((cptDemande == cptLoaded) && (isDone == true))
    {
        afficher();
    }
}

对我来说,只要一个小小的提示,你可以通过将所有图像属性存储在Object然后将它们推到一个{{1}上来让自己的生活更轻松。而不是为每个属性管理一个单独的数组。

这样的事情:

Array