PDA

Просмотр полной версии : Некорректная работа цикла


Makkssimka
02.06.2013, 21:12
Доброго времени суток! По чему в этом коде, при выборе нескольких изображений, сохраняется только одно(последнее):

public var loadIm:Loader = new Loader();
public var imageName:String;
public function uploadImg(event:MouseEvent):void{
for (var i:int = 0; i < imgList.length; i++) {
var image:ByteArray = imgList[i].img;
imageName = imgList[i].name;
loadIm.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
loadIm.loadBytes(image);
}
}

public function onLoaderComplete(e:Event):void{
trace (vas); // Выдает только один объект Bitmap
var vas:Bitmap = loadIm.content as Bitmap;
var origBit:BitmapData = vas.bitmapData;
var soot:Number;
var scaleH:Number;
var scaleW:Number;
var scaleY:Number;
var scaleX:Number

if (origBit.height > origBit.width) {
soot = origBit.height/origBit.width;
scaleH = 1080/origBit.height;
scaleW = (1080/soot)/origBit.width;
scaleY = Number(scaleH.toFixed(3));
scaleX = Number(scaleW.toFixed(3));
}
else {
soot = origBit.width/origBit.height;
scaleW = 1920/origBit.width;
scaleH = (1920/soot)/origBit.height;
scaleY = Number(scaleH.toFixed(3));
scaleX = Number(scaleW.toFixed(3));
}

var newH:int = origBit.height*scaleH;
var newW:int = origBit.width*scaleW;


var scaleBit:BitmapData = new BitmapData(newW, newH, origBit.transparent);
var scaleMatrix:Matrix = new Matrix();
scaleMatrix.scale(scaleX, scaleY);

scaleBit.draw(origBit, scaleMatrix);

var img:ByteArray;
img = new JPEGEncoder(90).encode(scaleBit);
upl(img);
}

public function upl(imag:ByteArray):void{
var loader:MultipartURLLoader = new MultipartURLLoader;
loader.addVariable('imgName', imageName);
loader.addFile(imag, imageName, 'imgData', 'image/jpeg');
loader.load('http://upload.ro/up/bin-debug/upload.php');
loader.addEventListener(Event.COMPLETE, onCompletes);
}

public function onCompletes (event: Event):void {

}

И еще одна проблема: при загрузке горизонтальных фото, по видимому во время их ресайза, опера подвисает(нет ответа) на несколько секунд, как это исправить?

Bletraut
02.06.2013, 21:29
Загружается последняя потому что лоадер не успевает загрузить все изображения за один проход. Нужно загружать все изображения последовательно, когда выполнится событие Complete.

Makkssimka
02.06.2013, 21:35
И как это реализовать, чет я никак не допру, 3 день на одном месте топчусь!

garymar
02.06.2013, 21:40
http://www.greensock.com/loadermax/ решит твою проблему точно. В таких задачах используй его, незаменимая штука

Wolsh
02.06.2013, 21:41
И будете топтаться до тех пор, пока не прочитаете хоть что-нибудь о Событиях и асинхронном выполнении кода. AS3 это не бейсик.

Makkssimka
02.06.2013, 21:53
Ну так трудно имея медицинское образование с этим разобраться :) Ладно пошел читать, всем удачи!