1

写真を順番に追加してステージに表示するコンテナ(またはムービークリップ)を作成しました。ただし、ファイルサイズが異なるため、最小のファイルサイズの写真が最初に追加されます。この問題を解決する方法。以下のサンプルコードをご覧ください

// image0.jpg -> 3k
// image1.jpg -> 2k
// image2.jpg -> 1k
// image3.jpg -> 2k
// image5.jpg -> 1k

var photoPath:Array = new Array();
var photoContainer:MovieClip = new MovieClip();

photoPath.push('image0.jpg');
photoPath.push('image1.jpg');
photoPath.push('image2.jpg');
photoPath.push('image3.jpg');
photoPath.push('image4.jpg');

for(var i = 0; i < photoPath.length; i++)
{
    var loader:Loader = new Loader();
    loader.load(URLRequest(photoPath[i]));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, photoLoaded);
}

function photoLoaded(e:Event):void
{
    photoContainer.addChild(e.target.content);
}

//output will looks like (image2,image5,image1,image3,image0) instead of 0,1,2,3,4,5
4

2 に答える 2

1

この問題を処理する方法はかなりあります。おそらく、現在のコードを改良する最も簡単な方法は、インスタンス化されたローダーをディスプレイリストに追加することです。これにより、photoContainerに正しい順序で配置されることが保証されます。ローダー自体ではなく、ビットマップ自体をディスプレイリストに含める必要がある場合は、photoLoadedメソッドでこれに対処できます。

import flash.display.Loader;

var photoPath:Array = new Array();
var photoContainer:MovieClip = new MovieClip();

photoPath.push('image0.jpg');
photoPath.push('image1.jpg');
photoPath.push('image2.jpg');
photoPath.push('image3.jpg');
photoPath.push('image4.jpg');

for(var i = 0; i < photoPath.length; i++)
{
    var loader:Loader = new Loader();
    photoContainer.addChild(loader);  //add the loader to photoContainer
    loader.load(new URLRequest(photoPath[i]));
    //you only actually have to listen for complete below if you want to replace the loader with its contents 
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, photoLoaded);
}

function photoLoaded(e:Event):void
{
    var loader:Loader = e.target.loader;
    var index:int = photoContainer.getChildIndex(loader);
    // this will add the contents of the loader in the same order the loader was originally added
    photoContainer.addChildAt(loader.content, index);
    photoContainer.removeChild(loader);
}
于 2013-02-08T20:40:56.893 に答える
0

配列で指定された順序で写真をロードしてコンテナに追加するだけです。

var photoPath:Array = new Array();
var photoContainer:MovieClip = new MovieClip();
var i:int = 0;

photoPath.push('image0.jpg');
photoPath.push('image1.jpg');
photoPath.push('image2.jpg');
photoPath.push('image3.jpg');
photoPath.push('image4.jpg');

loadPhoto(i);

function loadPhoto(i:int):void
{
    var loader:Loader = new Loader();
    loader.load(new URLRequest(photoPath[i]));
    loader.contentLoaderInfo.addEventListener(Event.COMPLETE, photoLoaded);
}

function photoLoaded(e:Event):void
{
    photoContainer.addChild(e.target.content);
    trace(e.target.url); // Verify
    if(i<photoPath.length-1) loadPhoto(++i);
}

出力:

image0.jpg
image1.jpg
image2.jpg
image3.jpg
image4.jpg
于 2013-02-08T20:48:31.007 に答える