2013-02-08 1 views
1

Я создал контейнер (или мувиклип), который будет добавлять фотографии в порядок и отображать на сцене. однако, из-за разного размера файла, он сначала добавит самую маленькую фотографию размера файла. как я могу решить эту проблему. смотрите пример код нижеphoto load order mess up as3

// 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 

ответ

1

Есть довольно много способов, чтобы справиться с этой проблемой, вероятно, самым простым способом дооснащения текущего кода, чтобы добавить загрузчик в DisplayList, как это конкретизируется. Это гарантирует, что они будут помещены в фотоконтейнер в правильном порядке. Если вы абсолютно необходимо само растровое изображение, чтобы быть в DisplayList, в отличие от самого загрузчика, вы можете решить эту проблему в методе 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); 
} 
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