0

我在游戏开始前加载游戏图像。因此,主函数将图像链接发送到图像加载对象。当我在 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 上找不到属性数据并且没有默认值

4

1 回答 1

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();
    }
}

只是给您一个小提示,您可以通过将图像的所有属性存储在 an 上Object然后将它们推送到单个Array,而不是为每个属性管理一个单独的 Array 来让自己的生活更轻松。

像这样的东西:

    private var loadedImages:Array = new Array();       

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

        var loader:Loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loading_done);
        loader.load(urlRequest);

        var imageData:Object = { };
        imageData.loader = loader;
        imageData.posX = img_x;
        imageData.posY = img_y;
        imageData.layer = layer;

        // Now we have a single Array with a separate element for 
        // each image representing all its properties
        loadedImages.push(imageData);

        cptDemande++;           
    }
于 2012-10-27T10:20:49.747 回答