Показать сообщение отдельно
Старый 23.09.2010, 04:12
MadEx вне форума Посмотреть профиль Отправить личное сообщение для MadEx Найти все сообщения от MadEx
  № 4  
Ответить с цитированием
MadEx

Регистрация: Dec 2005
Сообщений: 20
Код AS3:
// body - конструктор класса.
public function body() {		
 			// Вешаем функцию прелоадера	
			addEventListener(Event.ENTER_FRAME, preloadMovie);
 
			// События для звука
			s.addEventListener(ProgressEvent.PROGRESS, getBT);
		    s.addEventListener(Event.COMPLETE, soundLoaded);
			s.load(soundPath);
 
			//ErrMsg.text = "Не удалось загрузить изображение";
			ErrMsg.multiline = true;
			ErrMsg.textColor = 0xFFFFFF;
			addChild(ErrMsg);
			// События для ХМЛ
 
			colorsLoader.addEventListener(ProgressEvent.PROGRESS, getBT);
			colorsLoader.addEventListener(ProgressEvent.PROGRESS, getBT);
			colorsLoader.addEventListener(ProgressEvent.PROGRESS, getBT);
 
			colorsLoader.addEventListener(Event.COMPLETE,xmlColLoaded);
			catalogLoader.addEventListener(Event.COMPLETE,xmlCatLoaded);
			seriesLoader.addEventListener(Event.COMPLETE,xmlSerLoaded);
 
 
 
		}		
 
//функция, получающая размер загружаемого файла (для хмл и музыки)
 
		public function getBT(e:ProgressEvent) {
			_bytesTotal += e.target.bytesTotal;
			e.target.removeEventListener(ProgressEvent.PROGRESS, getBT);
		}
 
		public function preloadMovie(e:Event) {
			var percent:Number = 0;
			_bytesLoaded += s.bytesLoaded + catalogLoader.bytesLoaded + seriesLoader.bytesLoaded + colorsLoader.bytesLoaded;
			if (_bytesTotal > 0) {
				percent = Math.floor(_bytesLoaded/_bytesTotal*100);
				(preload as preloader).percent_text.text = percent+"%";
				(preload as preloader).gotoAndStop(percent+1);
 
			} 
			if (_bytesLoaded >= _bytesTotal || _bytesTotal==0) {
				(preload as preloader).percent_text.text = "done";
 
				removeEventListener(Event.ENTER_FRAME, preloadMovie);
				var spec:spectrum = new spectrum(arrCatalog);
				spec.name = "spectrum";
				gotoAndStop(2);
				ErrMsg.text = "\n" + _bytesTotal;
 
				addChild(spec);
			}
			_bytesLoaded -= s.bytesLoaded + catalogLoader.bytesLoaded + seriesLoader.bytesLoaded + colorsLoader.bytesLoaded;
 
		}
// Вот так
		public function preloadMovie(e:Event) {
			var percent:Number = 0;
			_bytesLoaded += s.bytesLoaded + catalogLoader.bytesLoaded + seriesLoader.bytesLoaded + colorsLoader.bytesLoaded;
			if (_bytesTotal > 0) {
				percent = Math.floor(_bytesLoaded/_bytesTotal*100);
				(preload as preloader).percent_text.text = percent+"%";
				(preload as preloader).gotoAndStop(percent+1);
 
			} 
			if (_bytesLoaded >= _bytesTotal || _bytesTotal==0) {
				(preload as preloader).percent_text.text = "done";
 
				removeEventListener(Event.ENTER_FRAME, preloadMovie);
				var spec:spectrum = new spectrum(arrCatalog);
				spec.name = "spectrum";
				gotoAndStop(2);
 
				addChild(spec);
			}
			_bytesLoaded -= s.bytesLoaded + catalogLoader.bytesLoaded + seriesLoader.bytesLoaded + colorsLoader.bytesLoaded;
 
		}
public function imgLoaded(e:Event) {
			_bytesLoaded += (e.target as LoaderInfo).bytesTotal;
		}
		public function imgProgress(e:ProgressEvent) {
			_bytesTotal += e.bytesTotal;
			(e.target as LoaderInfo).removeEventListener(ProgressEvent.PROGRESS,imgProgress);
		}
		// Загрузка картинок из xml
		public function xmlColLoaded(e:Event) {
			colors = XML(colorsLoader.data);
 
			for each(var prop:XML in colors.color) {
				var objCol:Object = new Object();
 
				var colImg:Loader = new Loader(); // лоадер для загрузки картинки спектра
				var colImgUrl:URLRequest = new URLRequest(prop.image.toString()); // urlrequest для картинки спектра
 
				//Создаем евент листенер на конец загрузки картинки, запускаем загрузк
				colImg.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, imgProgress);
				colImg.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
 
				colImg.load(colImgUrl);
 
				//Продолжаем добавление информации в массив
				objCol.id = prop.id;
				objCol.image = colImg;
				objCol.items = new Array();
 
				arrCatalog.push(objCol);
				}
			arrCatalog.sortOn("id", Array.NUMERIC);		
		}
(Часть функций я опустил)

Вот только какой-то он глючный получился. Не с первого раза запускается - иногда просто ничего не грузит, а иногда после нескольких рефрешей - работает нормально.

Так ещё похоже и в разных браузерах по-разному.

Я так понимаю, что я что-то не так делаю при сборе bytesLoaded и bytesTotal со всех подгружаемых элементов.

Как ведет себя флэшка можно посмотреть тут madex-design.ru/kyboe

Добавлено через 28 минут
Причем, похоже, в разных браузерах по-разному.