0

ゲームが始まる前にゲームの画像を読み込んでいます。そのため、メイン関数は画像のリンクを画像読み込みオブジェクトに送信します。これは、メインで 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();
    }
}

ちょっとしたヒントですが、プロパティごとに個別の Array を管理するのではなく、画像のすべてのプロパティを に格納してObjectから、これらを単一の にプッシュすることで、作業がずっと楽になります。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 に答える