Столкнулся с очень интересным багом. Если во время загрузки контента, не дав загрузится до конца, начать грузить другой контент тем же лоадером, получим в итоге как в анекдоте 165% или даже больше процентов загрузки. Так же при загрузке контента, попытки закрыть поток методом close тоже будут не удачны.
Можете попробовать сами.
[as]
private var _loader : Loader;
private var _info : TextField;
public function LoadMore() {
//INIT
var offset:uint = 20;
var btn1:Sprite = button(“test1″);
var btn2:Sprite = button(“test2″);
btn1.x = btn2.x = offset;
btn1.y = offset;
btn2.y = 3 * offset;
_loader = new Loader();
_loader.x = 150;
_loader.y = offset;
_info = new TextField();
_info.selectable = true;
_info.autoSize = TextFieldAutoSize.LEFT;
_info.x = offset;
_info.y = 350;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
//DISPLAY LIST
addChild(_loader);
addChild(btn1);
addChild(btn2);
addChild(_info);
//LISTENERS
btn1.addEventListener(MouseEvent.CLICK, onClick);
btn2.addEventListener(MouseEvent.CLICK, onClick);
//ACTIONS
}
private function button(str : String) : Sprite {
var btn : Sprite = new Sprite();
btn.graphics.lineStyle(0, 0×333333,0.4,true);
btn.graphics.beginFill(0xF6F6F7);
btn.graphics.drawRoundRect(0, 0, 100, 20, 10, 10);
btn.graphics.endFill();
btn.name = str;
var tf : TextField = new TextField();
tf.selectable = false;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.text = str;
tf.x = (btn.width – tf.width) * 0.5;
tf.y =( btn.height – tf.height) * 0.5;
btn.mouseChildren = false;
btn.buttonMode = true;
btn.addChild(tf);
return btn;
}
private function loadIMG(path : String) : void {
var url : URLRequest = new URLRequest(path + “.jpg”);
/*try{
_loader.unload();
trace(“UNLOAD”);
}catch (e : TypeError) {
//nothing
}
try{
_loader.close();
trace(“CLOSE STREAM”);
}catch (e : TypeError) {
//nothing
}catch (e : Error){
//nothing
}*/
_loader.load(url);
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded);
_loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, imageLoading);
}
/*
* EVENTS
*/
private function imageLoading(e : ProgressEvent) : void {
trace(“LOADED:”,e.bytesLoaded,” TOTAL:”, e.bytesTotal);
_info.text = “LOADED:”+e.bytesLoaded+” TOTAL:”+ e.bytesTotal;
}
private function imageLoaded(e : Event) : void {
}
private function onClick(e : MouseEvent) : void {
loadIMG(e.currentTarget.name);
}
[/as]
Как это работает в WEB :
[flash /f/loadMore.swf h=400]